4
私はディレクトリを毎秒スキャンし、新しいファイルをチェックし、もし現れたら、POST要求を介してそれらを送信し、アーカイブを実行するアプリケーションを書いています。ディレクトリに表示できるファイルの数を10から100までとすると、asyncioとaiohttpを使用してリクエストを同時に送信することにしました。asyncio。ループにコルーチンを動的に追加します
コード:
import os
import aiohttp
from aiohttp.client import ClientSession
BASE_DIR = '/path/to'
ARCHIVE_DIR = '/path/to/archive'
async def scan():
while True:
await asyncio.sleep(1)
for file in os.listdir(BASE_DIR):
if os.path.join(BASE_DIR, file).endswith('jpg'):
asyncio.ensure_future(publish_file(file))
async def publish_file(file):
async with ClientSession(loop=loop) as session:
async with session.post(url=url, data={'photo': open(os.path.join(BASE_DIR, file), 'rb')}) as response:
if response.status == 200:
await move_to_archive(file)
async def move_to_archive(file):
os.rename(os.path.join(BASE_DIR, file), os.path.join(ARCHIVE_DIR, file))
loop = asyncio.get_event_loop()
coros = [
asyncio.ensure_future(scan())
]
loop.run_until_complete(asyncio.wait(coros))
そこで質問です:私は同時要求を送信する場合、これは、このようなループにコルーチンを追加することをお勧めし:asyncio.ensure_future(publish_file(file))
?