首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
华为云
V2EX  ›  Python

请问该用多线程还是单线程多个进程呢?

  •  
  •   ChenJinluo · 187 天前 · 3484 次点击
    这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。
    萌新请教:需要几个程序对数据库进行操作,但是这几个程序并没有啥共享变量啥的,都是独立的。开始想多线程编程就写一个 py 文件来运行就可以了;但是想到也可以一个程序一个 py 文件,就是要多 python xxx.py 几次(主要是因为我还没学 python 的多线程编程这块-。-)
    请问这两个方法有什么优劣吗?
    第 1 条附言  ·  186 天前
    谢谢大家的建议
    21 回复  |  直到 2018-02-10 10:02:54 +08:00
        1
    dobelee   187 天前 via Android   ♥ 1
    都還沒學多線程,就想著用多線程還是多進程,我只能說:你想多了。
        2
    coffeSlider   187 天前 via Android
    你的问题好混乱啊,Python 的话,优先选择多进程吧。
        3
    powergx   187 天前 via iPhone   ♥ 1
    如果是要利用 cpu,的所有资源,可用多进程。 看延迟用在哪里了 ,如果是网络 /io 之类的 gevent 就能帮助你。 先学习学习
        4
    heeroz   187 天前   ♥ 1
    python 无论多线程还是多进程性能都很麻烦绕圈子或者性能低,还不如换个语言写让 python 调用
        5
    snnn   186 天前 via Android
    Python 的话,优先选择多进程吧
        6
    innoink   186 天前   ♥ 1
    python 一般会有 GIL,如果是 io 多的多线程也可以,一般是多进程
        7
    wisej   186 天前 via Android   ♥ 1
    1. 题目描述有问题,啥叫单线程多个进程?我的理解就是:用多线程还是多进程
    2. 你启动多进程的方法…不方便而且不太好。应该使用标准库 mutilprocess
    3. 这两个方法优劣。很简单,你两个方法都写出来,做个测试不就好了。重效率,你就比较执行时间。

    一些拙见:数据库操作属于 io 任务。所以多线程是可以的。不过你得注意,如果你是一个线程一个连接,最好有连接池;如果共享一个连接,那你得加锁,同时创建连接的时候把 check_same_thread 设为 False
        8
    wisej   186 天前 via Android
    @wisej 如果有这个或者类似的检查设置的话
        9
    goofool   186 天前 via Android   ♥ 1
    解决问题有简单的方法就用简单的,我觉得多运行几个 python 能解决就挺好。如果是学习的话,可以研究研究
        10
    KKKKKK   186 天前 via Android
    异步算了
        11
    LokiSharp   186 天前 via iPhone
    看你在不在意性能,不在意的话无所谓,也没必要
        12
    ChenJinluo   186 天前
    @wisej 我没说清-。- 意思就是一个进程只有一个线程,开多个进程
        13
    forcecharlie   186 天前   ♥ 1
    进程面临的问题,进程间通信,同步,创建代价稍高。线程面临问题,数据竞争,多线程的各种坑,还有 GIL。

    实际上在 Linux 系统上,线程就是个特殊的进程,和父进程共享数据空间,getpid 返回主线程的 tid,主线程的 tid 就是其 pid,使用 syscall(SYS_GETTID) 就可以知道 。fork pthread_create 一般都是使用 syscall SYS_CLONE.
        14
    lovedebug   186 天前   ♥ 1
    以数据库的并发能力,你的需求一个线程或进程就够了 - - ,弄什么多线程多进程。。。
        15
    lovedebug   186 天前
    补充一下用简单的 ORM 甚至简单的 jdbc 类似的库就够了。 上框架之前先看自己需求以及当前的服务并发处理能力,自己估算一下。 当然如果是学习,什么框架都可以了🤪
        16
    SummerWQM   186 天前
    我觉着 可以用用 GO
        17
    owenliang   186 天前   ♥ 1
    python 是推崇多进程的,毕竟多线程有 GIL 锁。因此 python 也提供了很多跨进程通讯的数据结构,基本可以满足跨进程传输需求。

    用 python 就不要太考虑并发能力了。
        18
    hl   186 天前
    看场景啊
        19
    vimiix   186 天前   ♥ 1
    要用什么方法,主要还是以需求为导向的。
    我觉得如果是简单的多任务并发,协程应该是最好的选择。
        20
    myyou   186 天前   ♥ 1
    python 线程在 cpu 计算类型没用,在 io 计算是有用的。如果是操作数据库,建议多线程
        21
    qkcccc   185 天前   ♥ 1
    操作数据库是网络 io 密集型,建议用协程
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   824 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 19:07 · PVG 03:07 · LAX 12:07 · JFK 15:07
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1