Python代码在两行代码

时间:2017-02-10 14:36:48

标签: python process

我正在创建一个子类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)]'

1 个答案:

答案 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获取更多信息。