具有多处理功能的新流程可以在主线程中运行吗?

时间:2017-11-21 03:53:41

标签: python multithreading multiprocessing

我需要与python3(iperf3)一起使用的库需要库“运行”功能在主线程中执行

我正在执行一些测试以验证使用多处理库的新进程是否允许我使用该进程的主线程但是看起来上面的代码片段我不能有新的'主要线程'为过程。

将forked进程作为新进程的主线程运行的推荐方法是什么?那可能吗?像芹菜这样的系统会对此有所帮助吗?我打算从Flask应用程序运行它。

谢谢!

#! /usr/bin/python3

import threading
import multiprocessing as mp


def mp_call():
    try:
        print("mp_call is mainthread? {}".format(isinstance(threading.current_thread(), threading._MainThread)))
    except Exception as e:
        print('create iperf e:{}'.format(e))


def thread_call():
    try:
        print("thread_call is mainthread? {}".format(isinstance(threading.current_thread(), threading._MainThread)))
        p = mp.Process(target=mp_call, args=[])
        p.daemon = False
        p.start()
        p.join()
        print('Process ended')
    except Exception as e:
        print('thread e:{}'.format(e))

t = threading.Thread(target=thread_call)
t.daemon = False
t.start()
t.join()
print('Thread ended')

1 个答案:

答案 0 :(得分:1)

事实上,所有线程都在fork之后死了,你将获得一个新的“主”线程,这是你当前的线程,你的检查方法是错误的。 threading._MainThread不是公开API,请改用threading.main_thread()

assert threading.current_thread() == threading.main_thread()

因为main thread got replaced在子进程fork之后,不再是_MainThread子类。