Open affmaker opened 7 years ago
Думаю не загарами. И можно ожидать в течении 1-2 недель.
С другой стороны Вам точно нужны асинхронные pipeline.process
?
По задумке pipeline
должен как можно быстрее передать результат и не тормозить.
И в большинстве случаев достаточно сделать так:
import asyncio
class SomePipeline(object):
async def producer_send(self, crawler, item):
pass
def process(self, crawler, item):
asyncio.ensure_future(self.producer_send(crawler, item))
В мастере начал 0.3.0 версию. Теперь для asyncio можно писать Pipeline,Middleware,Crawler корутинами и использовать async/await синтаксис. см. https://github.com/estin/pomp/blob/master/CHANGES.rst#version-030
Тест 0.3.0 версии
python3.5 e04_aiohttp.py
Traceback (most recent call last):
File "e04_aiohttp.py", line 82, in <module>
from pomp.contrib.asynciotools import AioPomp
File "pomp/contrib/asynciotools/__init__.py", line 52, in <module>
class AioPomp(SyncPomp):
File "pomp/contrib/asynciotools/__init__.py", line 115, in AioPomp
exec('\n'.join(switch_to_asyncio(SyncPomp._process_items)))
File "<string>", line 15
SyntaxError: 'yield' inside async function
Нужен питон минимум версии 3.6, а именно нужна поддержка PEP 525: Asynchronous Generators https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep525
~/p/pomp (master|✔) $ python --version
Python 3.6.0
~/p/pomp (master|✔) $ python examples/e04_aiohttp.py | tail -2
Statistics:
requests/responses/exceptions = 2/2/0
P.S. Надо бы об этом явно заявить в доке )
Когда можно ожидать?