我正在创建一个子类multiprocessing.Process
的类。
做测试的时候,
我注意到调用start()
时进程没有启动。
在一些测试之后,在__main__
模块中执行两行代码之前,进程似乎不会启动
举个例子
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
我已经在不同的平台上测试过了,它的工作原理和预期的一样。
我运行的是windows10,python3.5.2。
sys.version
的输出是'3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]'
众所周知,在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了解更多信息
相关问题 更多 >
编程相关推荐