将类方法放在 RQ 队列上时出现 Python rq 错误



>我需要在RQ队列上放置一个类方法。但它给出了一个错误

这是 worker.py

import os
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()

这是单独文件中的类

import requests
import re
class Robots():
def __init__(self, url):
self.url = url

def get_url(self):
if self.url.endswith('/'):
return self.url + "robots.txt" 
else:
return self.url + "/robots.txt"

def get_status_code(self):
return requests.get(self.get_url()).status_code

这是 app.py

import time
from rq import Queue
from worker import conn
from rob import Robots
url = 'http://heroku.com'
q = Queue(connection=conn)
task = q.enqueue(Robots(url).get_status_code())
print (task.result)
time.sleep(4)
print (task.result)

当我运行代码时,它给出了一个错误。

File "app.py", line 8, in <module>
task = q.enqueue(Robots(url).get_status_code())
File "/home/atom/Desktop/Python/Tests/herokurq/lib/python3.8/site-packages/rq/queue.py", line 381, in enqueue
depends_on, job_id, at_front, meta, args, kwargs) = Queue.parse_args(f, *args, **kwargs)
File "/home/atom/Desktop/Python/Tests/herokurq/lib/python3.8/site-packages/rq/queue.py", line 353, in parse_args
if not isinstance(f, string_types) and f.__module__ == '__main__':

当我使用简单的函数而不是类方法时 - 一切正常。但我需要把方法放进去。它给出了一个错误。

我发现了问题 我应该使用 task = q.enqueue(Robots(url(.get_status_code( 而不是任务 = q.enqueue(Robots(url(.get_status_code(((

最新更新