супер простой случай использования - положить изображение загрузить работу с Redis очередипитона Redis очередь ставит в очередь только 1 работа
# main.py
from redis import Redis
from rq import Queue
from tasks import download_asset
queue = Queue(connection=Redis())
if __name__ == '__main__':
image_urls = ['https://image.com/image1.png', 'https://image.com/image2.png']
job1 = queue.enqueue(download_asset, image_urls[0], result_ttl=5000)
print job1
job2 = queue.enqueue(download_asset, image_urls[1], result_ttl=5000)
print job2
import time; time.sleep(3)
print job1.result
print job2.result
когда я бегу python main.py
,
<Job 8de87fc3-0480-4181-bb57-182773eaa4dd: tasks.download_asset('https://image.com/image1.png')>
<Job 6e334cc7-e2a5-46cb-b28a-7f8df6921c44: tasks.download_asset('https://image.com/image2.png')>
None
None
результатов их нет, но я вижу второе изображение загружено в папку. и в журнале рабочих
01:48:26 default: tasks.download_asset('https://image.com/image2.png') (6e334cc7-e2a5-46cb-b28a-7f8df6921c44)
download image
01:48:26 Job OK
01:48:26 Result is kept for 5000 seconds
01:48:26
01:48:26 *** Listening on default...
только 1 работа была обработана
Рабочие были уставились с помощью rq worker
.
скачать код:
def download_asset(url):
print 'download image'
media_file = urllib2.urlopen(url)
file_name = url.split('/')[-1]
with open(file_name, 'w') as f:
f.write(media_file.read())
одна вещь, которую я заметил, если я ставлю sleep.time (3) между Епдиеие, то первый по-прежнему не получает в очередь
где определены image_urls? –
прямо над enqueue –
Как вы знаете, что только один объект находится в очереди? –