首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  windardyang  ›  全部回复第 1 页 / 共 1 页
回复总数  9
2018-11-26 23:44:25 +08:00
回复了 icymorn 创建的主题 分享创造 小工具: ColorTale —— 每一种颜色都有一个好听的名字
这是什么字体,有字体不支持的字哟。
![晨曦红]( 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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1835 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 34ms · UTC 00:09 · PVG 08:09 · LAX 16:09 · JFK 19:09
♥ Do have faith in what you're doing.