workersに関するHerokuのドキュメントに従っていますが、成功しませんでした。バックグラウンドジョブとして実行されるモジュールutil.py
があります:Herokuワーカーは動作しません
util.py:
import requests
def count_words_at_url(url):
resp = requests.get(url)
return len(resp.text.split())
そして労働者のキューにutils.pyを置く:
from utils import count_words_at_url
from rq import Queue
from worker import conn
q = Queue(connection=conn)
result = q.enqueue(count_words_at_url, 'http://heroku.com')
Question1:I q.enqueue(...)
の仕組みを知りたいですか?私は、最初の引数は(count_words_at_url
は、関数名と第二引数(「http://heroku.com
」です)count_words_at_url
関数の引数として使用されることを想定。
私が正しいだ場合は、なぜなぜいけないのでしょうか?resp = requests.get(url)
その引数を取得する必要がありますただreturn len(url.split())
EDIT:?
質問2:大きなファイルを(Herokuのは、常にタイムアウトにより、このような要求を終了)をアップロードすることができるようにするために、私はその意志の機能にHTTPリクエストを渡したいですバックグラウンドジョブとして実行する:
urls.py
:
urlpatterns = [
url(r'upload/', views.upload),
]
views.py
def upload(request):
if request.method=='GET':
return render(request, 'upload/upload.html')
# POST
q = Queue(connection=conn)
q.enqueue(uploadFile, request)
return render(request, 'upload/upload.html')
def uploadFile(request):
# Upload files to Google Storage
fileToUpload = request.FILES.get('fileToUpload')
cloudFilename = 'uploads/' + fileToUpload.name
conn = boto.connect_gs(gs_access_key_id=GS_ACCESS_KEY,
gs_secret_access_key=GS_SECRET_KEY)
bucket = conn.get_bucket(GS_BUCKET_NAME)
fpic = boto.gs.key.Key(bucket)
fpic.key = cloudFilename
# Public read:
fpic.set_contents_from_file(fileToUpload, policy='public-read')
upload.html
:Cannot serialize socket object
私はフォークプロセスにソケットオブジェクトを渡すことはできませんことを回し:
...
<form method=post action="/upload/" enctype=multipart/form-data>
{% csrf_token %}
<input type=file name=fileToUpload><br><br>
<input type=submit value=Upload>
</form>
...
私は、エラーメッセージが表示されました。大容量のファイルをアップロードするためのソリューションはありますか?ありがとう。
アイデアを得ました。ありがとう。私は質問2を再編集しました。 –