2015-08-03 7 views
0

У меня есть следующий в моей колбе приложении:GEvent нить не появляется последовательные параметрами от списка

d = {'a': a, 'token':token} 
import gevent.monkey 
gevent.monkey.patch_socket() 
threads = [gevent.spawn(myfunction, d) for i in range(2)] 
result = gevent.joinall(threads) 
print [thread.value for thread in threads] 

Я пытаюсь использовать несколько greenlets из следующих функций:

def myfunction(args): 

    a= args['a'] 
    token= args['token'] 
    lo = list_object() 

вот оно устанавливаются :

def list_object(): 
     qlist = [] 
     # the following redis db lookup produces qlist=[a,b,c,......z] 
     qlist = pr.query.order_by('failed').all() 
    return qlist.pop(0) 

Я замечаю, что, хотя я ожидал, что каждый проветриватель будет вытолкнуть первый элемент с , так что запуск 2 потоков (как в этом примере) приведет к тому, что первое значение потока lo будет «a», а второе «b». Однако я вижу, что оба значения lo устанавливаются в 'a'. Почему это происходит? Как я могу это исправить?

Edit:

qlist = [] 
d = {'a': a, 'token':token 'q':qlist} 
....... 

ответ

1

Это потому, что вы экземпляр QList в начале функции? Поэтому я думаю, что «a» снова добавляется pr.query.order_by(). All(). Возможно, сделайте qlist глобальной переменной и создайте параметр list для list_object. Затем «a» следует выталкивать навсегда. Я мог ошибаться, потому что я предполагаю, что pr.query.order_by.all() каждый раз добавляет «a» в список.

+0

Спасибо, я понимаю, что вы говорите. Как вы думаете, что сделайте это глобальным? – user61629

+0

Да, до тех пор, пока он заполняется до использования функции. Думаю, вам не нужно будет использовать его как параметр для вашей функции, если он глобальный. – Connor

 Смежные вопросы

  • Нет связанных вопросов^_^