我看到這個問題是在谷歌高,所以如果你來這裏希望能找到更多一些細節,這裏是我落得這樣做:
首先,我準備在我的應用程序的端點。我的應用程序使用Flask,所以這是怎樣的代碼看起來:
@app.route("/worker", methods=["GET", "POST"])
def worker():
#refresh the interface or whatever is necessary
if flask.request.method == 'POST':
return 'Worker endpoint reached'
elif flask.request.method == 'GET':
worker = IronWorker()
task = worker.queue(code_name="hello", payload={"WORKER_DB_URL": app.config['WORKER_DB_URL'],
"WORKER_CALLBACK_URL": app.config['WORKER_CALLBACK_URL']})
details = worker.task(task)
flask.flash("Work queued, response: ", details.status)
return flask.redirect('/')
注意,在我的情況下,得到的是這裏只是爲了測試,我不希望我的用戶打這個端點,並調用任務。但是我可以想象這種情況實際上是有用的,特別是如果您不爲任務使用任何類型的調度程序。
與端點準備好了,我開始尋找訪問端點從工作人員的一種方式。我發現這個fantastic requests library和我的員工使用它:
import sys, json
from sqlalchemy import *
import requests
print "hello_worker initialized, connecting to database..."
payload = None
payload_file = None
for i in range(len(sys.argv)):
if sys.argv[i] == "-payload" and (i + 1) < len(sys.argv):
payload_file = sys.argv[i + 1]
break
f = open(payload_file, "r")
contents = f.read()
f.close()
payload = json.loads(contents)
print "contents: ", contents
print "payload as json: ", payload
db_url = payload['WORKER_DB_URL']
print "connecting to database ", db_url
db = create_engine(db_url)
metadata = MetaData(db)
print "connection to the database established"
users = Table('users', metadata, autoload=True)
s = users.select()
#def run(stmt):
# rs = stmt.execute()
# for row in rs:
# print row
#run(s)
callback_url = payload['WORKER_CALLBACK_URL']
print "task finished, sending post to ", callback_url
r = requests.post(callback_url)
print r.text
那麼,到底這裏沒有真正的魔法,唯一重要的事情就是送回調URL的有效載荷,如果你需要通知你的頁面時,任務完成。或者,如果您在應用中使用端點url,則可以將端點url放置在數據庫中。順便說一句。上面的剪切也顯示瞭如何連接到你的worker中的postgresql數據庫並打印所有的用戶。
你需要知道的是如何格式化.worker文件最後一兩件事,我的是這樣的:
# set the runtime language. Python workers use "python"
runtime "python"
# exec is the file that will be executed:
exec "hello_worker.py"
# dependencies
pip "SQLAlchemy"
pip "requests"
這將安裝SQLAlchemy的和要求的最新版本,如果你的項目依賴在任何特定版本的庫上,您應該這樣做:
pip "SQLAlchemy", "0.9.1"
您能否提供一些更多詳細信息?我可以推送什麼樣的消息?基本代碼示例可能? – lawicko