作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在试验 Python (python.org) C API 时,我发现自己想知道当 Python 本身嵌入到 C 程序中时如何通过 Python 的 threading
包正确地生成线程。一旦 C 函数完成对 Python 代码块的评估,函数 PyEval_EvalCode
和 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()
... 一旦 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
我怀疑一种可能的方法是创建一个专用于嵌入和运行 Python 的新系统线程。在产生 Python 线程后,Python 代码会在信号量或其他东西上休眠,直到它被告知关闭。那么问题将是如何向线程发出整齐关闭的信号?同样,“主” block 可以简单地在所有线程上加入();然后需要从 C 向线程发出信号。
非常感谢解决方案..
最佳答案
您是否包含了 pthread 库?如果 Python 检测到真正的线程不可用,它会回退到虚拟线程
关于嵌入式 Python 中的 Python 线程 : How?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159256/
我是一名优秀的程序员,十分优秀!