首页   注册   登录
 windardyang 最近的时间轴更新

windardyang

V2EX 第 311158 号会员,加入于 2018-04-24 11:22:00 +08:00
关于 Python redis 的 Lock 有两个疑问
  •  1   
    Redis  •  windardyang  •  2018-08-25 09:36:35 AM  •  最后回复来自 helloSpringBoot
    5
    windardyang 最近回复了
    这是什么字体,有字体不支持的字哟。
    ![晨曦红]( http://e.hiphotos.baidu.com/image/%70%69%63/item/64380cd7912397dd15ac074c5482b2b7d1a287a5.jpg)
    2018-08-30 23:08:16 +08:00
    回复了 Andor_Chen 创建的主题 Flask 送几本《Flask Web 开发(第 2 版)》
    感谢楼主。
    2018-08-30 23:07:58 +08:00
    回复了 Andor_Chen 创建的主题 Flask 送几本《Flask Web 开发(第 2 版)》
    第一版很好。
    2018-08-24 23:41:15 +08:00
    回复了 windardyang 创建的主题 Redis 关于 Python redis 的 Lock 有两个疑问
    @seven2016 #1 我的意思也是 `set key value nx` 较现有方式好一些,可是现在它并不是这样实现。
    2018-08-24 23:39:58 +08:00
    回复了 windardyang 创建的主题 Redis 关于 Python redis 的 Lock 有两个疑问
    @scriptB0y #2 指的是 `redis/lock.py` 代码里的两个 Lock 类,只截取了获得锁的部分代码,完整的类请看源代码。
    2018-07-26 14:08:43 +08:00
    回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
    @vipppppp 1 楼是太匆忙写反了,Thread 表示线程,Process 表示进程。
    2018-07-24 17:51:43 +08:00
    回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
    1. 不是 100s 后才接收到的话,那你是多久后接收到的? 99s ?
    2. gunicorn 起了 4 个 worker,每个 worker 单独运行 app,与你的 app.run 没有关系,这相当于四个进程,每个 app 单线程单进程。

    gunicorn 使用按照 wsgi 协议启动 app,app.run 使用的是 werkzeug 的 run_simple 启动 app,你看一下 run_simple 的启动参数或者 flask 源码就知道了。
    2018-07-24 17:32:18 +08:00
    回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
    默认单线程单进程。
    `app.run(threaded=True)` 多进程
    `app.run(processes=4)` 多线程
    2018-04-24 15:36:21 +08:00
    回复了 aice114 创建的主题 Python 请问一下有关 Python 多进程的问题
    #### 进程锁

    进程锁的位置很重要

    ```
    # -*- coding: utf-8 -*-
    from multiprocessing import Process, Lock
    import time


    lock = Lock()

    class ScheduleTest():
    @staticmethod
    def printx():
    while True:
    print('hello x')
    time.sleep(5)

    def run(self):
    print('printx is running...')
    my_process = Process(target=self.printx)
    my_process.start()


    def app_run():
    my_schedule = ScheduleTest()
    for i in range(3):
    with lock:
    p = Process(target=my_schedule.run)
    p.start()
    p.join()


    if __name__ == '__main__':
    app_run()

    ```

    #### 信号量

    信号量其实也是进程锁

    ```
    # -*- coding: utf-8 -*-
    from multiprocessing import Process, Semaphore
    import time


    s = Semaphore(1)


    class ScheduleTest():
    @staticmethod
    def printx():
    while True:
    print('hello x')
    time.sleep(5)

    def run(self):
    s.acquire()
    print('printx is running...')
    my_process = Process(target=self.printx)
    my_process.start()
    my_process.join()
    s.release()


    def app_run():
    my_schedule = ScheduleTest()
    process_0 = Process(target=my_schedule.run)
    process_1 = Process(target=my_schedule.run)
    process_2 = Process(target=my_schedule.run)
    process_0.start()
    process_1.start()
    process_2.start()


    if __name__ == '__main__':
    app_run()

    ```

    #### 共享变量

    共享变量注意需加锁

    ```
    # -*- coding: utf-8 -*-
    from multiprocessing import Process, Manager, Lock
    import time

    manager = Manager()
    sum = manager.Value('tmp', 0)
    lock = Lock()


    class ScheduleTest():
    @staticmethod
    def printx():
    while True:
    print('hello x')
    time.sleep(5)

    def run(self):
    with lock:
    if not sum.value:
    print('printx is running...')
    my_process = Process(target=self.printx)
    my_process.start()
    sum.value += 1
    else:
    print('printx has ran.')


    def app_run():
    my_schedule = ScheduleTest()
    process_0 = Process(target=my_schedule.run)
    process_1 = Process(target=my_schedule.run)
    process_2 = Process(target=my_schedule.run)
    process_0.start()
    process_1.start()
    process_2.start()


    if __name__ == '__main__':
    app_run()

    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2275 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 11ms · UTC 15:47 · PVG 23:47 · LAX 07:47 · JFK 10:47
    ♥ Do have faith in what you're doing.