gearman python 实例

本文介绍了一个使用 Gearman 的 Python 客户端示例,包括 worker 和 client 的实现方式。通过示例代码展示了如何定义 worker 处理函数、注册任务以及如何从 client 提交任务并获取结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FROM: http://www.ttlsa.com/distributed-processing-systems/gearman-python-example/

有关gearman的介绍,可以参见本博客之前的文章。

gearman的Python客户端使用蛮简单的。具体方法参见:http://pythonhosted.org//gearman/library.html

worker:

from  gearman import GearmanWorker
from var_dump import var_dump
import json
 
def worker_ttlsa.com(gearman_worker,job):
    var_dump(job.data)
    param = json.loads(job.data)
    sleep = param['sleep']
    return str(sleep)
 
def main():
    gw = GearmanWorker(['127.0.0.1:4730'])
    gw.register_task("worker_ttlsa.com", worker_ttlsa.com)
    gw.work()
 
if __name__ == "__main__":
    main()

client:

from gearman import GearmanClient
from var_dump import var_dump
import json
 
def main():
    gc = GearmanClient(['127.0.0.1:4730'])
    param = {'msg':'www.ttlsa.com', 'sleep':5}
     
    request = gc.submit_job('worker_ttlsa.com',json.dumps(param))
    var_dump(request.result)
 
if __name__ == "__main__":
    main()

注意:worker一定要有retrun,且返回的内容必须是字符串。否则报下面的错误。

TypeError: Expecting byte string, got <type ‘NoneType’>

查看状态:

# telnet 127.0.0.1 4730
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
workers
36 127.0.0.1 - :
35 127.0.0.1 - : worker_ttlsa.com
.
status
worker_ttlsa.com    0       0       1
.

status输出分4个部分:已注册的任务,正在运行的任务,队列中的任务,可用的worker。



### 管理信息系统中的Python应用实例 #### 使用PyMySQL连接数据库实现图书馆管理系统的案例分析 在构建基于Python的管理信息系统时,可以采用`pymysql`库来操作关系型数据库。例如,在开发一个简单的图书馆管理系统中,通过该模块能够轻松完成图书借阅记录、会员信息维护等功能[^1]。 ```python import pymysql def connect_db(): connection = pymysql.connect( host='localhost', user='root', password='', database='library' ) return connection def add_book(title, author): conn = connect_db() try: with conn.cursor() as cursor: sql = "INSERT INTO books (title, author) VALUES (%s,%s)" cursor.execute(sql,(title,author)) conn.commit() finally: conn.close() add_book('The Great Gatsby','F. Scott Fitzgerald') ``` 此代码片段展示了如何建立与本地MySQL服务器之间的链接,并向名为`books`的数据表内插入一条新纪录。这仅仅是整个系统功能的一部分;完整的应用程序还将涉及更多复杂的业务逻辑以及用户交互界面的设计。 #### 利用Tkinter创建图形化的前端界面 对于希望提供更加直观用户体验的信息系统而言,除了后台数据处理外,还需要考虑前台展示效果。此时可借助于`tkinter`这个轻量级但强大的GUI工具包来进行视窗程序开发工作[^2]。 ```python import tkinter as tk class Application(tk.Frame): def __init__(self,master=None): super().__init__(master) self.master=master self.pack() self.create_widgets() def create_widgets(self): self.hi_there=tk.Button(self,text="Greet",command=self.say_hi) self.quit=tk.Button(self,text="Quit",fg="red", command=self.master.destroy) self.hi_there.pack(side="top") self.quit.pack(side="bottom") def say_hi(self): print("hi there!") if __name__=="__main__": root=tk.Tk() app=Application(master=root) app.mainloop() ``` 上述例子定义了一个继承自`Frame`类的小部件集合——即所谓的“应用程序”。它包含了两个按钮控件:“打招呼”和退出选项。当点击前者时会在控制台输出问候语句;后者则关闭当前窗口并结束进程执行流程。 #### 关于任务队列的选择考量 值得注意的是,在某些特定场景下(比如高频率访问或大数据量传输),传统的SQL-based方法可能不是最优解法。如果项目需求涉及到频繁的任务调度或是实时性强的操作,则建议评估其他更适合的技术栈,如Gearman这样的分布式作业框架[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值