【python】gearman阻塞非阻塞,同步/异步,状态
2017-07-28 19:04
387 查看
参考:
http://pythonhosted.org/gearman/client.html?highlight=submit_multiple_jobs#gearman.client.GearmanClient.submit_multiple_jobs
http://blog.csdn.net/y2701310012/article/details/44035959
github上一个使用GearmanAdminClient获取gearman任务状态的例子:
https://github.com/zolech/zabbix-gearman-template/blob/master/check_gearman.py
在使用gearman分发任务时,如果分发速度过快容易导致队列满载,进而导致后续任务丢失等问题。所以需要根据任务队列大小适当放缓发送任务的速度。
下面给出了代码例子:
background:表示同步(False)或者异步(True) 同步的含义是:client在给server提交任务后关注任务的结果,即会从server获取任务执行结果。 而异步则表示:client不关心server中任务的执行结果,没有结果返回通道。
wait_until_complete:表示阻塞(True)或者非阻塞(False) 阻塞的含义是:client一直等到server的返回结果后才继续向下运行。 而非阻塞的含义是:client发布任务给server后立刻向下执行,可以后续再获取执行结果。
上面的代码只避免了队列拥挤,但是如果任务失败了gearman会如何处理呢?
http://pythonhosted.org/gearman/client.html?highlight=submit_multiple_jobs#gearman.client.GearmanClient.submit_multiple_jobs
http://blog.csdn.net/y2701310012/article/details/44035959
github上一个使用GearmanAdminClient获取gearman任务状态的例子:
https://github.com/zolech/zabbix-gearman-template/blob/master/check_gearman.py
在使用gearman分发任务时,如果分发速度过快容易导致队列满载,进而导致后续任务丢失等问题。所以需要根据任务队列大小适当放缓发送任务的速度。
下面给出了代码例子:
def sharp_task_request(list_of_jobs): global gearman_host, gearman_port, task_name, task_queue_max ret = 0 try: gm_client = GearmanClient([gearman_host + ":" + gearman_port]) gm_admin_client = GearmanAdminClient([gearman_host + ":" + gearman_port]) # background=False client同步 wait_until_complete=False 非阻塞模式 submitted_requests = gm_client.submit_multiple_jobs(list_of_jobs, background=False, wait_until_complete=False) while True: gm_status = gm_admin_client.get_status() for task in gm_status: if task['task'] == task_name: if task['queued'] >= task_queue_max: # 任务队列过大时等待 time.sleep(2) else: break except: traceback.print_exc() ret = 1 return ret
background:表示同步(False)或者异步(True) 同步的含义是:client在给server提交任务后关注任务的结果,即会从server获取任务执行结果。 而异步则表示:client不关心server中任务的执行结果,没有结果返回通道。
wait_until_complete:表示阻塞(True)或者非阻塞(False) 阻塞的含义是:client一直等到server的返回结果后才继续向下运行。 而非阻塞的含义是:client发布任务给server后立刻向下执行,可以后续再获取执行结果。
上面的代码只避免了队列拥挤,但是如果任务失败了gearman会如何处理呢?
相关文章推荐
- python# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selector
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
- python之多进程和多线程以及同步异步阻塞
- 同步和异步关注的是消息通信机制,阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
- 同步/异步,阻塞/非阻塞
- [转]理解阻塞非阻塞与同步异步
- 【精辟】socket阻塞与非阻塞,同步与异步,select,pool,epool
- 并发编程基础概念(一) IO-同步,异步,阻塞,非阻塞
- android 异步回调中操作UI线程,UI同步、卡死阻塞等性能问题
- socket阻塞与非阻塞,同步与异步、I/O模型
- unix下的I/O------阻塞,非阻塞,同步,异步
- 阻塞非阻塞与同步异步的区别
- 最简单解释 阻塞、非阻塞、同步、异步
- 关于IO的同步,异步,阻塞,非阻塞
- 【转载】同步与异步--阻塞与非阻塞型I/O
- 聊聊同步、异步、阻塞与非阻塞
- 同步与异步 ,阻塞与非阻塞
- 同步、异步、阻塞、非阻塞,自己的理解
- 阻塞与非阻塞-同步与异步