有执行约几分钟完成的 100 个 Class/函数,每次收到命令后要开始执行这 100 个 Class,是用 Threading 实现吗? - V2EX
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
a251922581

有执行约几分钟完成的 100 个 Class/函数,每次收到命令后要开始执行这 100 个 Class,是用 Threading 实现吗?

  •  
  •   a251922581 Jul 9, 2017 2726 views
    This topic created in 3234 days ago, the information mentioned may be changed or developed.
    Python 初学者求教。。
    python 写的服务器端,每次收到请求命令的时候,需要执行 100 个 Class ( Class 就包含一个函数具体干活),因为请求来自不同客户,所以可能会同时有几十个请求。
    最好还能实现客户能对没执行完的那些 Class 进行 Pause/Resume/Terminate 暂停执行 /恢复执行 /终止执行
    多线程能完成这个项目需求吗?
    class serv100:
    def serv( parameter):
    print ("abc")
    .....
    class serv199:
    def serv( parameter):
    print("xyz")


    def handleClientRequest(options):
    ??????

    初学者求教,??????这边大概的代码怎么写?一开始要 import 哪些 library? Thanks in advance.
    7 replies    2017-07-13 11:43:56 +08:00
    a251922581
        1
    a251922581  
    OP
       Jul 9, 2017
    100 def 的函都做到 1 Class 是不是要好一些?
    Class server(option):
    def serv100:
    print()
    def serv101:
    print()
    ......
    def serv199:
    print()
    ToBeHacker
        2
    ToBeHacker  
       Jul 10, 2017   1
    第一次遇到 Pause/Resume/Terminate 这样的需求,话说服务器构造的返回不是都要尽量快吗
    Kongyuan
        3
    Kongyuan  
       Jul 10, 2017   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。

    有不对的地方,还请指正~
    a251922581
        4
    a251922581  
    OP
       Jul 11, 2017
    @ToBeHacker 因为每个函数都是要运行几分钟到几十分钟才能完成任务的,资源消耗都不大,但是运行时间比较长
        5
    a251922581  
    OP
       Jul 11, 2017
    @Kongyuan 多谢解答,C/S 的桌面应用,Server 端接收到 Client 端请求后,后台运行这 100 个 thread/process,然后直接返回的,函数 /Class 所执行任务的结果在另外的地方会有体现,所以 Server 端要做的就是把函数扔到后台运行。
    目前是直接 Flask + FlaskRestful API,还没有用到其它的 Web 框架。
    cszeus
        6
    cszeus  
       Jul 12, 2017
    感觉应该用个消息队列吧。每次来个请求,把任务放进队列就可以返回了。
    Kongyuan
        7
    Kongyuan  
       Jul 13, 2017
    @a251922581 Flask ( wsgi ) + FalskRestful API 足够解决了, 配合 APScheduler。
    About     Help     Advertise     Blog     API     FAQ     Solana     4707 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 06:26 PVG 14:26 LAX 23:26 JFK 02:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86