0
今天,我写了一个简单的脚本,允许我到基准的OpenStack的SWIFT服务器:GIL何时发布?
import swiftclient
import uuid
from concurrent.futures import ThreadPoolExecutor
def create():
client = swiftclient.client.Connection(
user='', key='',
authurl='https://auth/', auth_version='2.0',
tenant_name='',
os_options={'tenant_id': '',
'region_name': ''})
while True:
uid = str(uuid.uuid4())
client.put_object(container='', obj=uid, contents=b'\x00')
executor = ThreadPoolExecutor(max_workers=100)
for _ in range(100):
executor.submit(create)
这顺利的话,但我注意到一个奇怪的东西,在此,CPU使用率超过400%扣球的过程。 由于GIL不应该允许使用超过100%的CPU,情况如何?
在我的代码中,每个使用的lib都是纯python,你会如何解释? – user312016
'requests'和'swiftclient'都使用'socket',它有一个C组件。在某些时候,所有的CPython都会调用C代码。 I/O操作(如通过套接字进行通信)听起来与释放GIL的类型完全相同。 –
这很有道理。谢谢 ! – user312016