我正在创建一个子类multiprocessing.Process
的类。
做一些测试时,
我注意到在调用start()
时进程没有启动。
经过一些测试后,似乎在__main__
模块中执行了2行代码后才开始进程。
作为一个例子
import multiprocessing
class Test(multiprocessing.Process):
def __init__(self, *args, **kwargs):
super(Test, self).__init__(*args, **kwargs)
print('created')
def run(self, *args, **kwargs):
super(Test, self).run(*args, **kwargs)
print('running')
sample = Test()
>>> created
sample.start()
pass # Did not start yet
pass # Will start after this
>>> running
我已经在不同的平台上测试了它,并且它在那里工作正常。
我正在运行Windows 10,Python 3.5.2。
sys.version
的输出为'3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]'
答案 0 :(得分:0)
众所周知,多处理在windows和linux下表现不同。通过其他平台你的意思是linux?多处理分叉(fork()
)Linux中的一个新进程,子进程获取所需的所有变量和信息的副本,其中Windows为每个进程生成一个新的python解释器副本。这里有一个很好的答案解释:
Python Multiprocess diff between Windows and Linux
因此,为了解决这个问题,请确保使用共享内存将所有全局变量显式传递给子进程。查看多处理文档: https://docs.python.org/dev/library/multiprocessing.html#sharing-state-between-processes获取更多信息。