如何在后台线程或进程中有效使用 PyJulia 或其他非线程安全库?

How to effectively use PyJulia or other non-thread-safe libraries in a background thread or process?

我的 Python 应用程序中有一个场景,我有一些工作需要在后台完成,但采用即发即弃的方式。我试图满足两个限制条件:

处理这种情况最简单的方法是什么?我想象我必须创建一个长期存在的工作线程或进程,我可以不断地向其排队任务,但如果不需要,我不想编写自定义代码来处理所有这些。

我找到的最简单的解决方案是使用 Python 的 multiprocessing.Pool 来创建一个仅包含一个进程的池,并保留该进程池我的应用程序的生命周期,并使用 apply_async 以即发即弃的方式在该进程池上执行任务:

from multiprocessing import Pool
...

class MyClass:
    def __init__(self):
        self.process_pool = None

    def my_pyjulia_task(self, arg1, arg2):
        ...

    def run(self, arg1, arg2):
        if not self.process_pool:
            self.process_pool = Pool(processes=1)

        self.process_pool.apply_async(self.my_pyjulia_task, (arg1, arg2))

这确保 PyJulia 不会阻塞主执行线程,并且始终在同一个 "background" 进程(以及同一个线程)中运行。显然 apply_async 也为该进程排队工作,因为我可以多次调用它并且任务按顺序执行。

如果有必要,使用 multiprocessing 工具启用从该进程到主应用程序的通信也不难。