Heute habe ich ein einfaches Skript, das mir eine Openstack schnellen Server Benchmark erlaubt:Wann wird die GIL veröffentlicht?
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)
Das geht gut, aber ich bemerkte eine seltsame Sache, den Prozess, wo auf mehr als 400% der CPU-Auslastung Spicken. Wie geschieht das, da die GIL die Verwendung von mehr als 100% der CPU nicht zulassen sollte?
In meinem Code ist jede benutzte Bibliothek reine Python, wie würden Sie das erklären? – user312016
'Anfragen' und' swiftclient' verwenden beide 'socket', die eine C-Komponente hat. Irgendwann ruft CPython den C-Code auf. I/O-Vorgänge wie die Kommunikation über Sockets klingen genau wie die Art von Dingen, die die GIL freigeben würden. –
Das macht Sinn. Vielen Dank ! – user312016