2014-10-07 4 views
0

Так что я пытаюсь заставить коров работать; чтобы мой пользовательский класс выполнял простую функцию, которая просто печатает привет на экране.
здесь моя работа классаКак установить собственный класс python в pyres?

class Foobar: 
    queue = "Spam" 
    def perform(self, number): 
     print 'hi' 

Затем после запуска моего сервера Redis с помощью redis-server

плохо идут в питона окр и запустить следующий

from pyres import * 
r = ResQ(server="192.168.1.10:6379", password="") 
import Foobar 
r.enqueue(Foobar, 5) 
from pyres.worker import Worker 
Worker.run(['Spam'], server="localhost:6379") 

следует ожидать простой привет, когда я выполните мой рабочий, однако ничто не печатает в среде python. Помощь приветствуется, поскольку я заметил, что сообщество не так много вокруг костров, и документация слишком ухищрена.

Кроме того, я загрузил рубиновый реск-камень, чтобы следить за моими работниками с помощью команды resque-web, и кажется, рабочий «Спам» готов, но работа никогда не попадает в очередь.

ответ

0

Моя проблема заключается в том, что вы не можете передать себя внутри метода выполнения, поскольку pyres ищет метод выполнения вместе с любыми аргументами, которые вы передаете. Изменяя метод выполнения, чтобы стать статичным, класс теперь доступен в очереди и может быть выполнен рабочим. Кроме того, если у вас есть другая функция внутри одного класса, вам также нужно объявить их как статические, если вы вызываете их внутри класса. Мой полный класс Работы тиражируются ниже

import pymongo 
from pymongo import MongoClient 
from pyres import ResQ 

client = MongoClient() 

db = client['trending'] 

class FacebookSocial: 
    queue = "FacebookSocial" 

    @staticmethod 
    def perform(): 
     articles = FacebookSocial.get_urls() 
     for article in articles: 
      fbsocial = FacebookSocial.get_social(article) 

    @staticmethod 
    def get_urls(): 
     articles = db.articles.find() 
     return articles 

    @staticmethod 
    def get_social(article): 
     fbsocial += article 
     return fbsocial 


r = ResQ() 
r.enqueue(FacebookSocial) 
1

Попробуйте добавить @staticmethod о способе выполнения

Смотрите пример костров документации: http://itybits.com/pyres/example.html

В вашем случае, полный пример будет:

class Foobar: 
    queue = "Spam" 
    @staticmethod 
    def perform(number): 
     print 'hi' 

from pyres import ResQ 
r = ResQ(server="localhost:6379", password="") 
r.enqueue(Foobar, 5) 
from pyres.worker import Worker 
Worker.run(['Spam'], server="127.0.0.1:6379") 
Смежные вопросы