Heroku的工人不工作
问题描述:
我下面Heroku的文档中关于workers,但从来没有成功过。有一个模块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')
问题1:我想知道q.enqueue(...)
是如何工作的。我想,第一个参数(count_words_at_url
是函数名,第二个参数(“http://heroku.com
”)将被用作count_words_at_url
函数的参数。
如果我是正确的,为什么是必要resp = requests.get(url)
得到这样的说法?为什么不只是return len(url.split())
编辑:
问题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
:
...
<form method=post action="/upload/" enctype=multipart/form-data>
{% csrf_token %}
<input type=file name=fileToUpload><br><br>
<input type=submit value=Upload>
</form>
...
我得到的错误信息:Cannot serialize socket object
转出,我不能传递一个Socket对象分叉过程。有没有其他解决方案可以用于大文件上传?谢谢。
答
的线索1是函数的名称。它不会说“统计网址中的字数”,它会显示“统计字数”,网址为“”。换句话说,它需要去获取URL所引用的页面,然后计算它上面的单词。这就是requests.get()
所做的。
我不明白你在第2点问什么。
有想法。谢谢。我已经重新编辑了问题2.任何建议? –