简体   繁体   中英

Gearman Submit Multiple Jobs AttributeError: 'str' object has no attribute 'get'

What I'm trying to achieve here is to submit multiple jobs to Gearman and print the results returned by the workers once they are done with processing the job.

I've read through the examples on:

https://pythonhosted.org/gearman/1to2.html#client-multiple-tasks https://pythonhosted.org/gearman/client.html

I then tried to implement the check_request_status in the following way:

list_of_jobs = []

for i in xrange(1,4,1):
    list_of_jobs.extend(dict(task='run_task', data=str(i)))

completed_requests = gm_client.wait_until_jobs_completed(submitted_requests,
                                                              poll_timeout=30.0)

for job_request in completed_requests:
    if job_request.complete:
        print job_request.result
    elif job_request.timed_out:
        print "Job %s timed out!" % job_request.unique
    elif job_request.state == JOB_UNKNOWN:
        print "Job %s connection failed!" % job_request.unique

I'm getting the following error which I can't seem to figure out even after much Google-fu, searching through the Gearman Google Groups and poring through other people's implementation of Gearman:

Traceback (most recent call last):
  File "supervisor.py", line 16, in <module>
    completed_requests = gm_client.submit_multiple_jobs(list_of_jobs)
  File "/usr/local/lib/python2.7/dist-packages/gearman/client.py", line 48, in submit_multiple_jobs
    requests_to_submit = [self._create_request_from_dictionary(job_info, background=background, max_retries=max_retries) for job_info in jobs_to_submit]
  File "/usr/local/lib/python2.7/dist-packages/gearman/client.py", line 169, in _create_request_from_dictionary
    job_unique = job_info.get('unique')
AttributeError: 'str' object has no attribute 'get'

Does anyone know what's going on here?

Turns out the error is a simple one. In the for-loop above, simply use the append function instead of extend for adding a dict to the list_of_jobs array:

list_of_jobs.append(dict(task='run_task', data=str(i)))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM