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

windardyang

V2EX 第 311158 号会员,加入于 2018-04-24 11:22:00 +08:00
windardyang 最近回复了
78 天前
回复了 Andor_Chen 创建的主题 Flask 送几本《Flask Web 开发(第 2 版)》
感谢楼主。
78 天前
回复了 Andor_Chen 创建的主题 Flask 送几本《Flask Web 开发(第 2 版)》
第一版很好。
84 天前
回复了 windardyang 创建的主题 Redis 关于 Python redis 的 Lock 有两个疑问
@seven2016 #1 我的意思也是 `set key value nx` 较现有方式好一些,可是现在它并不是这样实现。
84 天前
回复了 windardyang 创建的主题 Redis 关于 Python redis 的 Lock 有两个疑问
@scriptB0y #2 指的是 `redis/lock.py` 代码里的两个 Lock 类,只截取了获得锁的部分代码,完整的类请看源代码。
113 天前
回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
@vipppppp 1 楼是太匆忙写反了,Thread 表示线程,Process 表示进程。
115 天前
回复了 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 源码就知道了。
115 天前
回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
默认单线程单进程。
`app.run(threaded=True)` 多进程
`app.run(processes=4)` 多线程
206 天前
回复了 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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1976 人在线   最高记录 3821   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 9ms · UTC 02:24 · PVG 10:24 · LAX 18:24 · JFK 21:24
♥ Do have faith in what you're doing.
沪ICP备16043287号-1