今日、私はベンチマークにOpenStackの迅速なサーバーを私を許可簡単なスクリプトを書きました: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はCPUの100%以上の使用を許可すべきではないので、どうしたのですか?
私のコードでは、すべてのlibは純粋なpythonですが、どうすればそれを説明できますか? – user312016
'requests'と' swiftclient'は両方ともCコンポーネントを持つ 'socket'を使います。ある時点で、CPythonはすべてCコードを呼び出します。ソケットを介した通信のようなI/O操作は、GILをリリースするもののタイプとまったく同じです。 –
意味があります。ありがとう! – user312016