Tyl*_*ler 5 python windows multiprocessing
我目前正在研究一些预先存在的代码,目的是加快速度。有几个地方非常适合并行化。由于 Python 具有 GIL,我想我会使用多进程模块。
但是,根据我的理解,这将在 Windows 上工作的唯一方法是,如果我从具有if __name__=='__main__' 保护措施的最高级别脚本中调用需要多个进程的函数。然而,这个特定的程序是作为一个模块来分发和导入的,所以让用户复制和粘贴这个保护措施有点笨拙,我真的很想避免这样做。
就多处理而言,我是运气不好还是误解了什么?或者有没有其他方法可以在 Windows 上做到这一点?
在 ms-windows 上,您应该能够导入程序的主模块,而不会产生启动进程等副作用。
当Python导入一个模块时,它实际上运行它。
因此,做到这一点的一种方法是在if __name__ is '__main__'区块中。
另一种方法是在函数内执行此操作。
以下内容不适用于 ms-windows:
from multiprocessing import Process
def foo():
print('hello')
p = Process(target=foo)
p.start()
Run Code Online (Sandbox Code Playgroud)
这是因为它在导入模块时尝试启动一个进程。
编程指南中的以下示例是可以的:
from multiprocessing import Process, freeze_support, set_start_method
def foo():
print('hello')
if __name__ == '__main__':
freeze_support()
set_start_method('spawn')
p = Process(target=foo)
p.start()
Run Code Online (Sandbox Code Playgroud)
因为导入模块时 if 块中的代码不会运行。
但将其放入函数中也应该可以:
from multiprocessing import Process
def foo():
print('hello')
def bar()
p = Process(target=foo)
p.start()
Run Code Online (Sandbox Code Playgroud)
当这个模块运行时,它会定义两个新函数,然后不运行。
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |