Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌入式Python中的Python线程:如何实现?_Python_C_Multithreading_Embed - Fatal编程技术网

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

嵌入式Python中的Python线程:如何实现?,python,c,multithreading,embed,Python,C,Multithreading,Embed,在试用Python的(Python.org)C API时,我发现自己在想,当Python本身嵌入到C程序中时,如何通过Python的threading包正确地生成线程。函数PyEval\u EvalCode和kin似乎会在C函数完成对Python代码块的求值后立即终止它“拥有”的线程。大致来说,从C运行以下Python import threading, time class MyThread(threading.Thread): def __init__(self, num):

在试用Python的(Python.org)C API时,我发现自己在想,当Python本身嵌入到C程序中时,如何通过Python的
threading
包正确地生成线程。函数
PyEval\u EvalCode
和kin似乎会在C函数完成对Python代码块的求值后立即终止它“拥有”的线程。大致来说,从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\u 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代码将在信号灯或其他东西上休眠,直到它被告知关闭。那么,问题是如何向线程发出整齐关闭的信号?类似地,“main”块可以在所有线程上简单地join();然后需要从C向线程发送信号


非常感谢解决方案。

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