Python - Как я могу сделать этот код асинхронным?

Вот код, который иллюстрирует мою проблему:

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, но оба они, похоже, используются для ввода-вывода сокетов.

Как я могу асинхронизировать свои блокирующие функции, не связанные с сокетами?

9
задан dave 11 February 2011 в 06:12
поделиться