我有一个程序(proc1),在其中间我创建了一个新线程(Thr1),我开始一个新进程(Proc2)。 Thr1 - 有一个无限循环等待来自Proc2的信号。 Proc2是一个始终等待来自任何客户端的连接的服务器。
proc1中的我开始这样一个新线程:
client = Thread(target=func , kwargs=some)
client.start()
print 'THREADs', threading.enumerate()
输出是:
THREADs [< _MainThread(MainThread,started 140134162933632)&gt ;, Thread(Thread-1,started 140133872453376)>]
从Thr1我有下一个输出:
在Thr1中我开始proc2这样:线程[< _MainThread(MainThread,140134162933632)>中的线程, 线程(Thread-1,已启动140133872453376)>]
p = Process(target=t, args=(receive, ))
p.start()
在proc2中我有下一个输出:
proc中的THREAD [Thread(Thread-1,140133872453376)>]
新proc2与Thr1具有相同的ID是正常的吗?
我问,因为这两个程序proc1和proc2分别正常工作。但我需要将它们组合起来,proc1应该启动proc2。当我将它们组合在一起时,有时候我开始出现Segmentation故障。每次运行都不会出现故障。只是有时。有时服务器接收数据然后proc1失败,有时Thr1启动然后程序失败。它在Thr1和proc2开始后失败了,我认为我做错了。
如何正确启动线程进程?
答案 0 :(得分:0)
您是否故意混合线程和流程?为什么不把一切都当成新的过程?
threading.enumerate返回所有活动线程的列表。你的proc2不是一个主题。这是一个过程。我认为这是不同的东西。在proc2中调用enumerate的那一刻,只有从proc1生成的Thread1才有效。由于Thread1具有GIL,proc1中的MainThread将被暂停。