python multiprocessing,为每个进程创建实例并重用它

福尔瑟

我正在使用 pytesseract 通过多处理方法进行一些 ocr。

该方法如下所示:

tess_api = PyTessBaseAPI()
Parallel(n_jobs=4)(delayed(execute)(image) for image in images)

具有以下功能:

def execute(image):
    tess_api.SetImage(image)
    text = tess_api.GetUTF8Text()

这将导致并发问题,因为 Worker 1 可能会在 Worker 2 执行 gettext() 之前覆盖图像

现在的想法是让每个工人拥有一个PyTessBaseAPI. 主要的想法是做这样的事情:

tess_apis = [PyTessBaseAPI(), PyTessBaseAPI(), PyTessBaseAPI(), PyTessBaseAPI()]

然后交给tess_api[0]工作人员 0 但我不知道如何在工作人员和实例之间建立连接。有什么建议,或者什么是更好的方法?因为我有成千上万的图像,所以我不想在 execute 函数中创建实例。

AKX

用于Pool(initializer=...)在每个工作进程开始读取其作业队列之前初始化 Tesseract 对象一次。

tess_api = None

def initialize_worker():
    global tess_api
    tess_api = PyTessBaseAPI()  # initialize a copy for this instance

def execute(image):
    tess_api.SetImage(image)
    text = tess_api.GetUTF8Text()

def main():
    with multiprocessing.Pool(initializer=initialize_worker) as p:
        for result in p.imap_unordered(images, chunksize=10):
            # ...

这仅在您使用实际流程时才有效;如果您使用的是线程(这可能会起作用,考虑到 Tesseract 是 C 并且会释放 GIL),您可以使用contextvars/ threading.local

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为每个实例Python创建新文件

来自分类Dev

python multiprocessing动态创建的进程和管道

来自分类Dev

Python真的为每个新实例创建了所有绑定方法吗?

来自分类Dev

为进程指定特定的CPU-python multiprocessing

来自分类Dev

为进程指定特定的CPU-python multiprocessing

来自分类Dev

如果创建multiprocessing.Pool,则Python子进程wait()失败

来自分类Dev

Python为每个项目创建变量

来自分类Dev

如何在jquery中创建函数并重用它们

来自分类Dev

如何清理使用堆栈(haskell)创建的目录并重用它?

来自分类Dev

Python多重处理为每个变量合并新进程

来自分类Dev

Python subprocess.call()为每个调用生成新进程

来自分类Dev

Python Multiprocessing-进程数

来自分类Dev

如果创建,Python子进程stderr / stdout字段为None

来自分类Dev

python 3.4 multiprocessing - 为不同的进程更改 ld_library_path

来自分类Dev

multiprocessing.Array(python):预期为float而不是numpy.ndarray实例

来自分类Dev

在python中创建实例

来自分类Dev

在Python 3中为每个组创建日期序列

来自分类Dev

使用Manager的python multiprocessing进程表现异常

来自分类Dev

是否通过Apache为Django应用程序的每个实例启动了单独的Python实例?

来自分类Dev

为 FMS 管理的每个新进程创建 actor 实例是否正确

来自分类Dev

检查Python multiprocessing.Connection的实例吗?

来自分类Dev

产生多个std :: thread并重用它

来自分类Dev

Python何时创建子进程?

来自分类Dev

Python何时创建子进程?

来自分类Dev

python multiprocessing-子进程阻止父进程

来自分类Dev

暂停并重新启动所有Python进程

来自分类Dev

Python-获取实例的进程ID

来自分类Dev

更好的做法:为每个重用RecyclerViewAdapter还是单独的实例?

来自分类Dev

更好的做法:为每个重用RecyclerViewAdapter还是单独的实例?

Related 相关文章

  1. 1

    为每个实例Python创建新文件

  2. 2

    python multiprocessing动态创建的进程和管道

  3. 3

    Python真的为每个新实例创建了所有绑定方法吗?

  4. 4

    为进程指定特定的CPU-python multiprocessing

  5. 5

    为进程指定特定的CPU-python multiprocessing

  6. 6

    如果创建multiprocessing.Pool,则Python子进程wait()失败

  7. 7

    Python为每个项目创建变量

  8. 8

    如何在jquery中创建函数并重用它们

  9. 9

    如何清理使用堆栈(haskell)创建的目录并重用它?

  10. 10

    Python多重处理为每个变量合并新进程

  11. 11

    Python subprocess.call()为每个调用生成新进程

  12. 12

    Python Multiprocessing-进程数

  13. 13

    如果创建,Python子进程stderr / stdout字段为None

  14. 14

    python 3.4 multiprocessing - 为不同的进程更改 ld_library_path

  15. 15

    multiprocessing.Array(python):预期为float而不是numpy.ndarray实例

  16. 16

    在python中创建实例

  17. 17

    在Python 3中为每个组创建日期序列

  18. 18

    使用Manager的python multiprocessing进程表现异常

  19. 19

    是否通过Apache为Django应用程序的每个实例启动了单独的Python实例?

  20. 20

    为 FMS 管理的每个新进程创建 actor 实例是否正确

  21. 21

    检查Python multiprocessing.Connection的实例吗?

  22. 22

    产生多个std :: thread并重用它

  23. 23

    Python何时创建子进程?

  24. 24

    Python何时创建子进程?

  25. 25

    python multiprocessing-子进程阻止父进程

  26. 26

    暂停并重新启动所有Python进程

  27. 27

    Python-获取实例的进程ID

  28. 28

    更好的做法:为每个重用RecyclerViewAdapter还是单独的实例?

  29. 29

    更好的做法:为每个重用RecyclerViewAdapter还是单独的实例?

热门标签

归档