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发出信号.
解决方案非常感谢