gpt4 book ai didi

嵌入式 Python 中的 Python 线程 : How?

转载 作者:太空狗 更新时间:2023-10-29 15:08:37 25 4
gpt4 key购买 nike

在试验 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com