Python进程在两行cod之后启动

2024-03-29 10:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: runtestself进程initdefargsmultiprocessing
1条回答
网友
1楼 · 发布于 2024-03-29 10:57:26

众所周知,在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了解更多信息

相关问题 更多 >