我该如何实现一些逻辑,以便在Windows上使用Python复制Linux中使用fork()
系统调用的功能?
具体来说,我正在尝试在SAPI Com组件上执行一个方法,同时继续主线程中的其他逻辑,而不会阻塞或等待。
我该如何实现一些逻辑,以便在Windows上使用Python复制Linux中使用fork()
系统调用的功能?
具体来说,我正在尝试在SAPI Com组件上执行一个方法,同时继续主线程中的其他逻辑,而不会阻塞或等待。
事实上,fork()
已经在Windows下通过Cygwin复制了,但这相当棘手。
Cygwin中的fork调用特别有趣,因为它不能很好地映射到Win32 API之上。这使得正确实现它非常困难。
请参阅Cygwin用户指南以了解此技巧的说明。
除了Greg指出的os模块中的进程管理代码外,您还应该查看threading模块: https://docs.python.org/library/threading.html
from threading import Thread
def separate_computations(x, y):
print sum(x for i in range(y)) # really expensive multiplication
Thread(target=separate_computations, args=[57, 83]).start()
print "I'm continuing while that other function runs in another thread!"
Eli的多线程示例可以运行线程,但在该行之后不会执行任何工作。
我将研究处理模块和子进程模块。我认为我正在运行的com方法需要在另一个进程中,而不仅仅是在另一个线程中。
multiprocessing
模块是标准库的一部分。subprocess
适用于外部程序,而 multiprocessing
则适用于 Python 代码。 - jfs您可能也喜欢使用processing模块(http://pypi.python.org/pypi/processing)。它具有许多功能,可以使用与线程模块相同的API编写并行系统...
multiprocessing
在Windows上的工作方式。https://docs.python.org/3.5/library/multiprocessing.html?highlight=spawn#contexts-and-start-methods - clacke
fork()
,因此有一些注意事项,其中主要的一点是确保任何脚本都受到if __name__ == "__main__"
保护,如果它要调用任何进行多进程处理的代码。生成的进程从头开始,并需要加载模块以能够重构状态。 - clackemultiprocessing.Process()
传递的参数是否被序列化以便传递给新进程?我编写了一个SSL客户端服务器应用程序。服务器为每个接收到的请求派生一个新进程,但会引发TypeError:cannot serialize socket object
错误。使用简单(非SSL)套接字进行相同操作可以正常工作,如此处所述。但是我不确定错误是否源自socket.py, line 185, in __getstate__
。 - Mahesha999