这完全是关于Python2.7
我有下一个问题:
from futures import ThreadPoolExecutor
def test():
while True:
i = 4
executor = ThreadPoolExecutor(max_workers=2)
executor.submit(test)
executor.submit(test)
因此,当我在双核机器上运行此类代码时,我会让两个内核都忙碌起来 为什么会发生这种情况,因为GIL,他们不应该只使用一半的资源来执行? 我认为他们使用一些系统调用,这就是为什么并行执行, 但我无法理解代码的哪一部分在系统核心上执行。
这里被解雇了:
dis.dis(main)
Disassembly of test:
2 0 SETUP_LOOP 16 (to 19)
>> 3 LOAD_GLOBAL 0 (True)
6 POP_JUMP_IF_FALSE 18
3 9 LOAD_CONST 1 (4)
12 STORE_FAST 0 (i)
15 JUMP_ABSOLUTE 3
>> 18 POP_BLOCK
>> 19 LOAD_CONST 0 (None)
22 RETURN_VALUE
还应该注意,当我运行代码时,我无法通过键入Ctr + C来停止程序。
我认为它的发生是因为我有2个核心和3个线程(1个主线程和2个线程池) 在每次打勾后输入Ctr + C解释器执行检查并且虽然ThreadPool线程是cpu绑定并且具有低优先级主线程但不能准确GIL,因为在ThreadPool线程的另一个核心上捕获GIL更快
但是根据我的理解,有时主线程应该获取GIL并停止程序,但它不会在5分钟内发生。
出了什么问题?