python多线程访问数据库,应该怎么使用
连接对象可以是同一个,指针不能是同一个。
假设conn是你的连接对象 每个线程使用cur=conn.cursor()来获得指针。如果有锁操作的话,有可能产生等待。这个是数据库级别要处理的问题。看你具体业务吧,比如你需要原子操作,连续写,中间不能断的,那你得注意使用事务,或者自己在写的时候锁表。这些问题自己搭一个环境一测便知。python多进程和多线程的区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
python的多线程是怎么实现的,听说底层是依据win32的线层实现
python使用Global Interpreter Lock,简称GIL,把守解释器的大门,同时保护C API的调用,假如有A,B,C三个线程同时运行,如果A线程进入了解释器,GIL会把B,C挡在大门之外,在线程调度的时候,会重新调度一个线程进入解释器,至于何时调度,调用sys.getcheckinterval()查看,这个也可以通过set来设置,至于调度哪个线程,这个则完全交给操作系统去做,从原理上看,就是模拟了操作系统的原生线程。
为什么有人说Python的多线程是鸡肋呢
这句话是片面的:
GIL锁限制了一个进程内的不同线程在同一个时刻只能占用一个CPU,由此可见,用多线程处理计算密集型的任务,python的多个线程需要互相等待获取CPU资源,此时的多个线程并不能并行,确实没有发挥我们预想中多线程的能力。
但是,如果执行的是IO密集型的任务,多个线程之间不存在太多的CPU资源的争夺,更多的是各个线程在进行IO传输、等待,此时多线程的能力仍然能够发挥出来。
所以不能简单的说Python的多线程是鸡肋,只是它的设计局限了它的适用场景罢了。
因为python的全局解释器锁的机制,
导致python的多线程并不是真正的多线程,
效率上不仅不会比单线程快,反而可能更慢,
所以说是鸡肋,要求速度好话,可以用多进程来实现
百度搜索圈T社区(www.aiquanti.com) 免费视频教程
还没有评论,来说两句吧...