在windows中复制fork()的最佳方法是什么?

时间:2008-08-22 20:27:47

标签: python windows process subprocess fork

我如何实现一些逻辑,允许我使用Python在Windows上使用fork()系统调用在Linux上重现我的功能?

我特意尝试在SAPI Com组件上执行一个方法,同时继续主线程中的其他逻辑而不阻塞或等待。

7 个答案:

答案 0 :(得分:17)

使用可在任何地方使用的python multiprocessing module

这是一个IBM developerWords article,它显示了如何从os.fork()转换为多处理模块。

答案 1 :(得分:10)

fork() 实际上已经在Cygwin下的Windows中重复了,但它非常多毛。

  

Cygwin中的fork调用特别有趣,因为它不能很好地映射到Win32 API之上。这使得很难正确实施。

有关此黑客的说明,请参阅The Cygwin User's Guide

答案 2 :(得分:3)

查看os module中的流程管理功能。有许多不同方式启动新进程的功能,包括同步和异步。

我还应该注意,Windows不提供与其他系统上的fork()完全相同的功能。要在Windows上执行多处理,您需要使用threading模块。

答案 3 :(得分:3)

除了Greg指出的os模块中的进程管理代码之外,您还应该看一下线程模块: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_compuations, args=[57, 83]).start()
print "I'm continuing while that other function runs in another thread!"

答案 4 :(得分:3)

来自Eli的Threading示例将运行该线程,但不会在该行之后执行任何工作。

我将查看处理模块和子进程模块。我认为我正在运行的com方法需要在另一个进程中,而不仅仅是在另一个进程中。

答案 5 :(得分:2)

您可能还想使用处理模块(http://pypi.python.org/pypi/processing)。它具有很多功能,可以使用与线程模块相同的API编写并行系统......

答案 6 :(得分:0)

可能是python的spawn()版本? http://en.wikipedia.org/wiki/Spawn_(operating_system)