嵌入式Python中的Python线程:如何?

Ty.*_*Ty. 5 c python embed multithreading

在尝试使用Python的(python.org)C API时,我发现自己想知道如何threading在Python本身嵌入到C程序中时通过Python 包正确生成线程.PyEval_EvalCode一旦C函数完成对Python代码块的评估,函数和kin就会终止它"拥有"的线程.粗略地说,从C运行以下Python ...

import threading, time

class MyThread(threading.Thread):
    def __init__(self, num):
        self.num = num
        threading.Thread.__init__(self)
    def run(self):
        print "magic num = %d" % self.num

for x in xrange(1000):
    MyThread(x).start()
Run Code Online (Sandbox Code Playgroud)

...一旦for循环结束并且控制从PyEval_EvalCode(或类似的)C函数返回,将完全停止.我们可以观察到这会产生截断的输出.

我在使用以下策略后假设了这种行为:我们可以决定何时返回控制,因此在一定程度上通过在产生大量线程后休眠来输出:

for x in xrange(100):
    MyThread(x).start()

# Don't leave just yet; let threads run for a bit
time.sleep(5) # Adjust to taste
Run Code Online (Sandbox Code Playgroud)

我怀疑可能的方法是创建一个专用于嵌入和运行Python的新系统线程.在产生Python线程之后,Python代码将睡在信号量或其他东西上,直到它被告知关闭.那么问题是如何通过线程发出信号以进行整洁关闭?类似地,"main"块可以简单地在所有线程上连接(); 然后需要从C发出信号.

解决方案非常感谢

Joh*_*ooy 2

你有包含pthread库吗?如果Python检测到真实线程不可用,它将回退到虚拟线程