1
a251922581 OP 100 個 def 的函數都做到 1 個 Class 裡是不是要好一些?
Class server(option): def serv100: print() def serv101: print() ...... def serv199: print() |
2
ToBeHacker 2017-07-10 10:27:13 +08:00 1
第一次遇到 Pause/Resume/Terminate 这样的需求,话说服务器构造的返回不是都要尽量快吗
|
3
Kongyuan 2017-07-10 16:37:14 +08:00 1
是 C/S 还是 B/S ?如果是 B/S, 那可以让 wsgi 来处理接收并发的客户请求。 取决于你选择什么样的 python wsgi 实现。 对应的实现会处理好不同客户不同时间发起的多个请求,每个请求相互间应该是线程 /进程独立的。(取决于你选择的 wsgi 实现)。 所以你只需要考虑再收到客户请求的时候( http get/post ) 你要如何执行那 100 个 class。 这里有两种方案:
1. 客户请求( http get/post )进入,你采用阻塞的方式运行 100 个 class,全部运行结束返回给客户运行结果。 这期间你可以用全局变量或者别的方式控制每个阻塞进程运行的情况。 但这样无法完全实现你想要的 pasue/resume/terminate 因为一旦客户端口链接,一般 wsgi 的实现会销毁掉你正在阻塞的处理线程 /进程。 2. 客户请求( http get/post ) 进入, 你开启非阻塞线程 /进程来跑 100 个 class, 然后立刻返回客户成功运行程序。 后台需要全局变量(或别的实现方式, 我常用类里面的静态变量和方法来代替全局变量)来控制。 总结而言, 用成熟的 python web 框架帮你处理用户请求,再自己去选择请求内创建自己可以控制的进程或线程完成任务,维护全局信息表来索引实现你的控制。 至于 是用 threading 还是 mulitprocess 则见仁见智了。 另外推荐用 APScheduler 这个包, 分装了 Pause/Resume/Terminate。 有不对的地方,还请指正~ |
4
a251922581 OP @ToBeHacker 因为每个函数都是要运行几分钟到几十分钟才能完成任务的,资源消耗都不大,但是运行时间比较长
|
5
a251922581 OP @Kongyuan 多谢解答,C/S 的桌面应用,Server 端接收到 Client 端请求后,后台运行这 100 个 thread/process,然后直接返回的,函数 /Class 所执行任务的结果在另外的地方会有体现,所以 Server 端要做的就是把函数扔到后台运行。
目前是直接 Flask + FlaskRestful API,还没有用到其它的 Web 框架。 |
6
cszeus 2017-07-12 05:44:18 +08:00
感觉应该用个消息队列吧。每次来个请求,把任务放进队列就可以返回了。
|
7
Kongyuan 2017-07-13 11:43:56 +08:00
@a251922581 Flask ( wsgi ) + FalskRestful API 足够解决了, 配合 APScheduler。
|