1楼:育知同创教育
python由于有全锁局的存在(同一时间只能有一个线程执行),并不能利用多核优势。所以,如果你的多线程进程是cpu密集型的,那多线程并不能带来效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降;如果是io密集型,多线程进程可以利用io阻塞等待时的空闲时间执行其他线程,提升效率。
python 是多线程还是多进程
2楼:育知同创教育
多线程的,进程是一个任务,线程才是执行任务的最小单位。
python 这样写多线程对吗
3楼:育知同创教育
多线程供你参考
import threading
import time
exitflag = 0
class mythread (threading.thread):
def __init__(self, threadid, name, counter):
threading.thread.__init__(self)
self.threadid = threadid
self.name = name
self.counter = counter
def run(self):
print "starting " + self.name
print_time(self.name, 5, self.counter)
print "exiting " + self.name
def print_time(threadname, counter, delay):
while counter:
if exitflag:
threadname.exit()
time.sleep(delay)
print "%s: %s" % (threadname, time.ctime(time.time()))
counter -= 1
# create new threads
thread1 = mythread(1, "thread-1", 1)
thread2 = mythread(2, "thread-2", 2)
# start new threads
thread1.start()
thread2.start()
print "exiting main thread"
4楼:匿名用户
抛开gil的问题 你这个是单线程的 当然和没有用线程写法一样
但是如果你想要的是并发的话 不仅需要多进程 而且你也不能把open函数写在执行体里 各个并发部分会重复创建覆盖这个文件的..
为什么有人说 python 的多线程是鸡肋
5楼:育知同创教育
差不多是这样子。多线程目前仅用于网络多线程采集, 以及性能测试。
其它的语言也有类似的情况,线程本身的特点导致线程的适用范围是受限的。只有cpu过剩,而其它的任务很慢,此时用线程才是有益的,可以很好平衡等待时间,提高并发性能。
线程的问题主要是线程的安全稳定性。线程无法强制中止,同时线程与主进程共享内存,可能会影响主进程的内存管理。
在python里线程出问题,可能会导致主进程崩溃。 虽然python里的线程是操作系统的真实线程。
那么怎么解决呢?通过我们用进程方式。子进程崩溃后,会完全的释放所有的内存和错误状态。所以进程更安全。 另外通过进程,python可以很好的绕过gil,这个全局锁问题。
但是进程也是有局限的。不要建立超过cpu总核数的进程,否则效率也不高。
简单的总结一下。
当我们想实现多任务处理时,首先要想到使用multiprocessing, 但是如果觉着进程太笨重,那么就要考虑使用线程。 如果多任务处理中需要处理的太多了,可以考虑多进程,每个进程再采用多线程。如果还处理不要,就要使用轮询模式,比如使用poll event, twisted等方式。
如果是gui方式,则要通过事件机制,或者是消息机制处理,gui使用单线程。
所以在python里线程不要盲目用, 也不要滥用。 但是线程不安全是事实。如果仅仅是做几个后台任务,则可以考虑使用守护线程做。
如果需要做一些危险操作,可能会崩溃的,就用子进程去做。 如果需要高度稳定性,同时并发数又不高的服务。则强烈建议用多进程的multiprocessing模块实现。
在linux或者是unix里,进程的使用代价没有windows高。还是可以接受的。
python 为什么多线程会造成数据不准
6楼:深圳中宇视通科技****
如果你的**是cpu密集型,多个线程的**很有可能是线性执行的。所以
这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch 但是:如果你的**是io密集型,多线程可以明显提高效率。例如制作爬虫
python的多线程使用setdaemon有什么意义
7楼:深圳中宇视通科技****
因为python的全局解释器锁的机制, 导致python的多线程并不是真正的多线程, 效率上不仅不会比单线程快,反而可能更慢, 所以说是鸡肋,要求速度好话,可以用多进程来实现
python的多线程使用setdaemon有什么意义
8楼:育知同创教育
使用setdaemon()和守护线程这方面知识有关, 比如在启动线程前设置thread.setdaemon(true),就是设置该线程为守护线程,
表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。
这样做的意义在于:避免子线程无限死循环,导致退不出程序,也就是避免楼上说的孤儿进程。
thread.setdaemon()设置为true, 则设为true的话 则主线程执行完毕后会将子线程**掉,
设置为false,主进程执行结束时不会**子线程
切线方程与法线方程有何区别,请问法线方程和切线方程有什么区别?是公式不同吗?如果是公式不同哪有什么公式?
1楼 那年丶人已散尽 1 计算方式不同 切线方程的计算方法有向量法,分析解析法,代入法等。 而法线方程的计算方法 法线斜率与切线斜率乘积为 1,即若法线斜率和切线斜率分别用 表示,则必有 1。法线可以用一元一次方程来表示,即法线方程。 与导数有直接的转换关系。 2 定义不同 切线方程定义 是研究切线...
直线方程斜率正负怎么判断,斜率的正负大小怎么看如果是倾斜程度 还有如果有平行
1楼 随风 计算斜率时要用k y1 y2 x1 x2 ,不能直接用截距相除,否则结果会出错。截距相除得到的为斜率的绝对值。 2楼 匿名用户 你会求斜率就好办了 看斜率的绝对值 越大则越陡 图象的话 如果直线的斜率是负数就往左边倒 正数就往右边倒 3楼 你好朱世杰 我觉得关键是1你先 判断它是否与x ...
广州地铁18号线全程多长时间,广州地铁18号线时速可达160公里是真的吗?
1楼 面朝大海路途 广州地铁18号线是广州地铁正在建设的线路之一。这条全长约62 7公里的线路设9座车站,其中有8个都是换乘站,将从广州东站直通南沙,最快30分钟即可到达! 广州地铁18号线定位为南沙快线,实现广州市中心城区与南沙新区的快速轨道交通联系,支持南沙新区 南沙自贸区发展,同时连接市中心城...