V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  windardyang  ›  全部回复第 2 页 / 共 2 页
回复总数  25
1  2  
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()

```
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4459 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 04:04 · PVG 12:04 · LAX 20:04 · JFK 23:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.