我正在尝试使用python-rq将redis中的基本作业排入队列,但它会抛出此错误
"ValueError:工作人员无法处理主模块的功能"
import requests
def count_words_at_url(url):
resp = requests.get(url)
return len(resp.text.split())
from rq import Connection, Queue
from redis import Redis
redis_conn = Redis()
q = Queue(connection=redis_conn)
job = q.enqueue(count_words_at_url, 'http://nvie.com')
print job
Run Code Online (Sandbox Code Playgroud)
GG_*_*hon 17
将提供的代码分解为两个文件: count_words.py:
import requests
def count_words_at_url(url):
resp = requests.get(url)
return len(resp.text.split())
Run Code Online (Sandbox Code Playgroud)
和main.py(你将导入所需的函数):
from rq import Connection, Queue
from redis import Redis
from count_words import count_words_at_url # added import!
redis_conn = Redis()
q = Queue(connection=redis_conn)
job = q.enqueue(count_words_at_url, 'http://nvie.com')
print job
Run Code Online (Sandbox Code Playgroud)
我总是将任务从运行这些任务的逻辑分离到不同的文件.这只是更好的组织.另请注意,您可以定义一类任务并从该类导入/计划任务,而不是上面建议的(过度简化)结构.这应该让你去..也请看这里确认你不是第一个与这个例子斗争的人.一旦掌握了RQ,RQ就很棒了.
小智 7
目前RQ中有一个bug,导致了这个错误。如果不显式导入它,您将无法从同一文件传递队列中的函数。
就add from app import count_words_at_url在入队函数之上:
import requests
def count_words_at_url(url):
resp = requests.get(url)
return len(resp.text.split())
from rq import Connection, Queue
from redis import Redis
redis_conn = Redis()
q = Queue(connection=redis_conn)
from app import count_words_at_url
job = q.enqueue(count_words_at_url, 'http://nvie.com')
print job
Run Code Online (Sandbox Code Playgroud)
另一种方法是将函数放在单独的文件中并导入它们。
| 归档时间: |
|
| 查看次数: |
3369 次 |
| 最近记录: |