带有全局导入的Python Windows多处理

时间:2018-08-17 09:17:54

标签: python windows multithreading

我的任务是将一些可以在Linux上完美运行的Python代码移植到Windows。不幸的是,代码因错误而失败:

  

已尝试在当前版本之前启动新进程   进程已完成其引导阶段。

从我一直在阅读的内容来看,这完全是由于Windows不使用fork,而是使用spawn创建新线程。

这是我要发布代码的地方,但是也有一个问题,其中有很多。一个文件导入另一个文件,另一个文件导入另一个文件,该文件启动线程,另一个文件又产生一个新线程。

因此,根据我一直在阅读的内容,只需使用if __name__ == '__main__':保护器来防止产生无限循环的线程,但我不知道将其放置在何处。

我运行的python文件已经有了这个位置,但是线程是从其他类的其他方法中产生的,所以我还需要将其放入这些类中吗?

似乎撰写此文件的任何人都使用了全局文件,该文件被导入到每个单独的python文件中,然后依次导入其他Python文件。很抱歉没有提供任何代码,但我什至不知道从哪里开始。

任何意见或建议都将不胜感激。

只是为了消除任何潜在的混乱,看来这段代码使用的是进程,而不是线程。所以有类似

的代码
import multiprocessing as mp
....
manager = mp.Manager()
...
process = mp.Process(blah)
process.start()
process.join()
....
process.terminate()

要添加更多信息,请在进行一些细微更改后运行该程序。它使用Flask提供了一个REST API,该API会在收到各种HTTP请求时运行功能。

当前在调用

时抛出此异常
manager = mp.Manager()

此行是在其他每个python文件中使用的global.py文件的一部分。


好的,经过一些修改,我现在已经解决了这个问题,然后转到另一个问题!现在,过程开始了,但是当从另一个类导入时,变量不可用

global.py
if __name__ == '__main__':
    thingy = manager.dict()

handler.py
from global import *
if thingy['status'] == 'working':
**NameError: name 'thingy' is not defined**

0 个答案:

没有答案