也许我只是不明白Threading是如何完全在Python中运行的,但根据我的理解,以下代码应该能够同时执行两个循环。
from threading import Thread
class minerThread(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def startMining(self,mineFunc):
while True:
print "geg"
def Main():
go=1
miner=minerThread()
miner.start()
miner.startMining("addr")
while go>0:
print "mine"
#Enter main loop
if(__name__ == "__main__"):
Main()
但是,程序只是挂在线程的startMining
循环上。
有谁知道最近发生了什么?
答案 0 :(得分:1)
CPython有一个叫GIL
( Global-Interpreter-Lock )的东西,它可以防止2个线程同时执行。
请参阅:https://wiki.python.org/moin/GlobalInterpreterLock
在CPython中,全局解释器锁或GIL是一个互斥锁,用于保护对Python对象的访问,防止多个线程同时执行Python字节码。这种锁是必要的,主要是因为CPython的内存管理不是线程安全的。 (但是,由于存在GIL,其他功能已经增长,取决于它所强制执行的保证。)
Python中的线程更适合IO绑定任务,其中一个线程阻塞输入并允许其他线程执行。
您尝试做的事情(以非常尴尬的方式)是CPU绑定的,并且一次只执行一个线程。在确定数量的OpCode中,在线程之间切换。购买你的线程不会同时执行。
如果要同时执行,则应该查看multiprocessing
模块
请参阅:https://docs.python.org/3/library/multiprocessing.html
注意:在线程代码中,您正在从主线程和第二个线程执行相同的代码。两者都打印相同的字符串,因此您很难识别解释器是否在线程之间切换