私はあなたが(reactor
として知られている)ツイストのイベントループを実行していないため、コールバックが呼び出されていない疑いがあります。あなたの睡眠機能を削除し、それをreactor.run()
に置き換えてください。
from twisted.internet import reactor
# ...
def main():
a = session.get('https://reqres.in/api/users')
a.addCallbacks(processResponse, processResponse)
#time.sleep(5) # never use blocking functions like this w/ Twisted
reactor.run()
キャッチを使用して、イベントループ(すなわち。reactor.stop()
)を停止し、一度ので、ツイストの原子炉は、再起動できないですreactor.run()
が再度実行された場合、例外が発生します。言い換えれば、あなたのスクリプト/アプリは「一度だけ」実行されます。この問題を回避するには、crochet
を使用することをおすすめします。ここでrequests-thread
から同様の例を使用した簡単な例です:
import crochet
crochet.setup()
print('setup')
from twisted.internet.defer import inlineCallbacks
from requests_threads import AsyncSession
session = AsyncSession(n=100)
@crochet.run_in_reactor
@inlineCallbacks
def main(reactor):
responses = []
for i in range(10):
responses.append(session.get('http://httpbin.org/get'))
for response in responses:
r = yield response
print(r)
if __name__ == '__main__':
event = main(None)
event.wait()
そして、ちょうどFYI requests-thread
としては、生産システムのためのものではなく、(2017年10月のような)大きな変化にさらされます。このプロジェクトの最終目標は、将来的にはrequests
のために待つことができるデザインパターンを設計することです。実稼動準備完了の同時要求が必要な場合は、grequests
またはtreq
と考えてください。