同样一块代码为什么在多进程中执行的这么慢啊

2020-10-29 22:05:24 +08:00
 18870715400
import time
import pymysql

class Result:
    def __init__(self):
        pass

    
    def set_result(self, result):
        pass
    
    def set_detail(self, detail):
        pass
    
    def get_json(self):
        pass

first_time = time.time()

conn = pymysql.connect()
cursor = conn.cursor()
cursor.execute("sql")
r = cursor.fetchone()
res, detail = r[0], r[1]

second_time = time.time()

result = Result()
result.set_result(res)
result.set_detail(detail)
data = result.get_json()

third_time = time.time()

在单进程中其中各个时间段的间隔特别短, 也就是当前代码几乎就是秒完成, 但是在 多进程当中, 有时候 second_time 到 third_time 的间隔有的时候竟然会相差 20 多 s, 就是感觉特别奇怪, 有大神有什么方法解决么? 其中 Result 类就是 对 结果进行格式化的, 因该花费不了多少时间. 但是 结果往往相反

1906 次点击
所在节点    Python
7 条回复
smallpython
2020-10-30 11:54:42 +08:00
只看你的示例代码看不出来有啥问题, 多进程的示例和 get_json 的示例能贴出来吗
no1xsyzy
2020-10-30 13:58:11 +08:00
那这显然是 Result 的问题,你全 pass 了让人看啥呢?
18870715400
2020-10-30 17:35:07 +08:00
就是因为多进程的原因, 我今天看了日志, 前面的时候跑的挺快的, 但是到后面整个时间越来越长
18870715400
2020-10-30 18:15:33 +08:00
@smallpython
@no1xsyzy 我查看了日志,主要是因为进程数目超过了电脑核心书目,所以多进程是假的多进程,当程序执行完数据库相关的代码之后跑去执行别的进程之后再回来继续执行,所以时间间隔很长,那么有什么解决的方法呢
no1xsyzy
2020-10-30 19:41:47 +08:00
@18870715400 进程池…… 不要每一处单独开进程
多进程是真的多进程,卡到核心数瓶颈了不是多进程本身的问题,是写法或者配置的问题……
18870715400
2020-10-30 20:17:34 +08:00
@no1xsyzy 没有办法, 差不多每一项都是单独的功能, 然后该功能单独有多个线程, 没有办法再缩了. 总的大概有 7-9 个进程
no1xsyzy
2020-11-01 02:51:46 +08:00
不对啊你这要是 CPU 密集不就是这样吗?
肯定没闲着就是了,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX