Вот код, который иллюстрирует мою проблему:
def blocking1():
while True:
yield 'first blocking function example'
def blocking2():
while True:
yield 'second blocking function example'
for i in blocking1():
print 'this will be shown'
for i in blocking2():
print 'this will not be shown'
У меня есть две функции, которые содержат while True
циклы. Это даст данные, которые я затем где-нибудь записываю (скорее всего, в базу данных sqlite).
Я поигрался с потоками и получил их. Однако мне это не очень нравится ... Я бы хотел сделать свои функции блокировки асинхронными. Что-то вроде:
def blocking1(callback):
while True:
callback('first blocking function example')
def blocking2(callback):
while True:
callback('second blocking function example')
def log(data):
print data
blocking1(log)
blocking2(log)
Как я могу добиться этого в Python? Я' Я видел, что стандартная библиотека поставляется с асинхронным ядром, и широко известное имя в этой игре - Twisted, но оба они, похоже, используются для ввода-вывода сокетов.
Как я могу асинхронизировать свои блокирующие функции, не связанные с сокетами?