Python多线程执行失败

我使用python编程实现查找某根目录下所有重复文件的功能,新手小白。
但是通过单步调试后,发现thread2.start()好像完全没有执行,直接就跳出循环了。
请高手看看~

2个回答

附代码

-*- coding: utf-8 -*-

import threading
import os
import os.path
import sys
import hashlib

def findFile1(rootPath, fileSeq, delSeq):
dirs = os.listdir(rootPath) #list the directories under the root path
for dir in dirs[0:len(dirs) // 2]: #traversal all the directories
path = rootPath + os.sep + dir #complete the path of current file
if os.path.isdir(path):
findFile1(path, fileSeq, delSeq) #if current file is a directory, recursive the function
else:
md5Check(path, fileSeq, delSeq) #if not a directory, check the md5

def findFile2(rootPath, fileSeq, delSeq):
# type: (object, object, object) -> object
dirs = os.listdir(rootPath) #list the directories under the root path
for dir in dirs[len(dirs) // 2 + 1:len(dirs)]: #traversal all the directories
path = rootPath + os.sep + dir #complete the path of current file
if os.path.isdir(path):
findFile2(path, fileSeq, delSeq) #if current file is a directory, recursive the function
else:
md5Check(path, fileSeq, delSeq)

def md5Check(path, fileSeq, delSeq):
f = file(path, 'rb') #open the file with 'read-only' and 'binary'
md5obj = hashlib.md5()
md5obj.update(f.read()) #calculate the md5
if md5obj.hexdigest() in fileSeq:
mutex1.acquire()
delSeq.append(path)
mutex1.release() #if md5 of current file is in the fileSeq, put the file path into the delSeq
else:
mutex2.acquire()
fileSeq.append(md5obj.hexdigest()) #if not in the fileSeq, put the md5 into the fileSeq
mutex2.release()

f.close() #close the file

def delList(delSeq):
print 'These files are waiting to be removed:'
for delFile in delSeq:
print delFile #list the file path in the delSeq

class myThread1 (threading.Thread):
def init(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
print "Starting " + self.name
# 获得锁,成功获得锁定后返回True
# 可选的timeout参数不填时将一直阻塞直到获得锁定
# 否则超时后将返回False
findFile1(rootPath, fileSeq, delSeq)
# 释放锁

class myThread2 (threading.Thread):
def init(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
print "Starting " + self.name
findFile2(rootPath, fileSeq, delSeq)
# 释放锁

mutex1 = threading.Lock()
mutex2 = threading.Lock()
threads = []

创建新线程

thread1 = myThread1(1, "Thread-1")
thread2 = myThread2(2, "Thread-2")

global fileSeq
fileSeq = []
global delSeq
delSeq = []

while True:
if len(sys.argv) == 1:
global rootPath
rootPath = raw_input('Enter the root path: ') #one parameter means no parameter, ask the root path
else:
rootPath = sys.argv[1] #or get the second parameter as the root path
try:
# 开启新线程
thread1.start()
thread2.start()
#try if the root path is valid
except(OSError):
print 'The root path is invalid. Please enter again. '
del sys.argv[1:]
continue #catch the except and delete all invalid parameters
break

if len(delSeq) == 0 :
print 'No duplicate file was found! ' #if no files in delSeq, exit
else:
delList(delSeq) #or list the delSeq
while True:
answer = raw_input('Would you want to remove these files? Please answer yes(y) or no(n): ')
answer.lower
if answer in ('yes', 'y'): #if "yes"
for delFile in delSeq:
try:
os.remove(delFile) #remove all files in delSeq
except(OSError):
print 'Warning! "%s" is not existed! ' % delFile
continue #ignore the files witch are not existed
print 'All duplicate files have been removed! '
break
elif answer in ('no', 'n'):
print 'Process has exited without any change! '
break #if "no", do nothing
else:
print 'Please enter yes(y) or no(n). '
sys.exit()

添加线程到线程列表

threads.append(thread1)
threads.append(thread2)

等待所有线程完成

for t in threads:
t.join()
print "Exiting Main Thread"

需要设置为守护线程

 somethread..setDaemon(True)
cracker180
variations 貌似多打了一个点..
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python多线程多进程问题
新手求问,刚学习python,发现在两个线程或两个进程开启后(都有一个while循环),必须要第一个执行完成,第二个才会执行,求问为什么会这样 ``` import threading import time class Test: def run(self): threading.Thread(target=self.func1()).start() threading.Thread(target=self.func2()).start() def func1(self): count = 0 while count < 3: print("thread1") count += 1 time.sleep(2) def func2(self): count = 0 while count < 3: print("thread2") count += 1 time.sleep(1) if __name__ == "__main__": Test().run() ``` ``` import multiprocessing import time class Test: def run(self): multiprocessing.Process(target=self.func1()).start() multiprocessing.Process(target=self.func2()).start() def func1(self): count = 0 while count < 3: print("thread1") count += 1 time.sleep(2) def func2(self): count = 0 while count < 3: print("thread2") count += 1 time.sleep(1) if __name__ == "__main__": Test().run() ``` 执行结果: ``` thread1 thread1 thread1 thread2 thread2 thread2 ```
python3 多线程执行后再执行主线程的问题
python3下如何在所有子线程执行完毕后再运行主线程? 下边是我的代码,再此基础上应该如何修改? 我程序大概意思就是: 先进行for 循环,每次循环创建1个线程,然后都执行func1这个函数,每次循环传递给func1的参数都不同, 我想在所有子线程运行结束后,再执行下边的代码,请高手帮忙,如何在我代码基础上进行修改? ![图片说明](https://img-ask.csdn.net/upload/201805/16/1526434707_966365.png)
python多线程锁机制(练习题)
代码如下: ``` from atexit import register from random import randrange from threading import Thread, currentThread, Lock from time import sleep, ctime class CleanoutSet(set): def __str__(self): return ', '.join(x for x in self) lock = Lock() loops = [] for x in range(randrange(3, 7)): loops.append(randrange(2, 5)) remaining = CleanoutSet() def loop(nsec): print(nsec) myname = currentThread().name lock.acquire() remaining.add(myname) print('[%s] Started %s' % (ctime(), myname)) lock.release() sleep(nsec) lock.acquire() remaining.remove(myname) print('[%s] completed %s (%d sec)' % (ctime(), myname, nsec)) print(' (remaining: %s) ' % (remaining or 'NONE')) lock.release def _main(): for pause in loops: Thread(target=loop, args=(pause,)).start() @register def _atexit(): print('all Done at: ', ctime()) if __name__ == '__main__': _main() ``` 运行程序,启动一个线程,然后就会卡住,运行环境是python3.6.0,求解答,谢谢
关于python3多线程的问题
代码如下: ![图片说明](https://img-ask.csdn.net/upload/201805/01/1525173395_783298.jpg) 我在每次循环后开启一个线程, 想问一下,程序线程的运行是每循环一次开启一个线程,然后执行相应的程序等这个等这些线程执行完毕后再 进入下个循环,还是这个线程开启后(相应的线程没有执行完毕)紧接着就会进入下个循环,开启下个线程? 像上边的代码,我运行后,电脑直接卡死了,我的初衷只是开启5个线程... 请高手指点一下,谢谢。
Python多线程问题,target以及kwargs传参出错,请问应该怎么写
``` def A(a,b,c): 代码块省略 def B(a,b,c,d): 代码块省略 def thread(self,arg*): t1 = threading.Thread(target=A,args=(a,b,c)) ``` 问题一:这里我想参数target=需要多开线程的方法名,然后我随便定义一个变量作为方法名参数传到target里面,,不行,,程序报错。求正确的传参方法,难不成我要为每一个要多开的方法都要多写一个多线程方法,,仅仅改个方法名参数?这太麻烦了 问题二:args这个参数我想改成kwargs字典形式的参数应该怎么改。t1 = threading.Thread(target=A,kwargs={a=1,b=2,c=3}) 这样报错,,然后改成t1 = threading.Thread(target=A,kwargs={‘a=1,b=2,c=3’})再改成一对参数和值加一组单引号还是报错,,求正确格式。。
python多线程最大线程数默认设置为什么与CPU数量有关。
【新手提问】 如题 python多线程最大线程数默认设置为什么与CPU数量有关。按照平时的了解,由于CPython 解释器,python的多线程不是伪多线程吗?实际上并不能使用到多个CPU,那为什么官方的默认设置线程池中最大线程数会与CPU数相关? concurrent.futures的文档: > Changed in version 3.5: If max_workers is None or not given, it will default to **the number of processors on the machine, multiplied by 5**, assuming that ThreadPoolExecutor is often used to overlap I/O instead of CPU work and the number of workers should be higher than the number of workers for ProcessPoolExecutor. > Changed in version 3.8: Default value of max_workers is changed to **min(32, os.cpu_count() + 4)**. This default value preserves at least 5 workers for I/O bound tasks. It utilizes at most 32 CPU cores for CPU bound tasks which release the GIL. And it avoids using very large resources implicitly on many-core machines.
python 多线程,求助!!!
请大家帮忙看一下下面的程序,感谢! #encoding=utf-8 import threading import time import pygame from pygame.locals import * from sys import exit def test(): global even_text while True: event = pygame.event.wait() event_text.append(str(event)) #获得时间的名称 event_text = event_text[-SCREEN_SIZE[1]/font_height:] #这个切片操作保证了event_text里面只保留一个屏幕的文字 if event.type == QUIT: exit() screen.fill((255, 255, 255)) y = SCREEN_SIZE[1]-font_height #找一个合适的起笔位置,最下面开始但是要留一行的空 for text in reversed(event_text): screen.blit( font.render(text, True, (0, 0, 0)), (0, y) ) #以后会讲 y-=font_height #把笔提一行 pygame.display.update() class MyThread(threading.Thread): def __init__(self,arg): super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。 self.arg=arg def run(self):#定义每个线程要运行的函数 time.sleep(1) test() print 'the arg is:%s\r' % self.arg pygame.init() SCREEN_SIZE = (640, 480) screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32) font_height = font.get_linesize() event_text = [] t =MyThread(1) t.start() print 'main thread end!' 我想运行pygame部分的时候另外开一个线程(为了可以在控制台打印一些信息,如果不另外开线程或者进程的话我不知道怎么才可以在显示pygame的窗口的时候在控制台输入输出信息,求大神指教)。pygame部分(函数test())输出的是触发的时间信息。 但是如果我像上面这样写,只要鼠标点到pygame窗口就会卡死,但是控制台正常。 如果我把程序改成如下这样(把pygame 的init换到新开的线程里进行),就运行正常,我想知道为什么,请大神指教! #encoding=utf-8 import threading import time import pygame from pygame.locals import * from sys import exit def test(): pygame.init() SCREEN_SIZE = (640, 480) screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32) font = pygame.font.SysFont("arial", 16) font_height = font.get_linesize() event_text=[] while True: event = pygame.event.wait() event_text.append(str(event)) #获得时间的名称 event_text = event_text[-SCREEN_SIZE[1]/font_height:] #这个切片操作保证了event_text里面只保留一个屏幕的文字 if event.type == QUIT: exit() screen.fill((255, 255, 255)) y = SCREEN_SIZE[1]-font_height #找一个合适的起笔位置,最下面开始但是要留一行的空 for text in reversed(event_text): screen.blit( font.render(text, True, (0, 0, 0)), (0, y) ) #以后会讲 y-=font_height #把笔提一行 pygame.display.update() class MyThread(threading.Thread): def __init__(self,arg): super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。 self.arg=arg def run(self):#定义每个线程要运行的函数 time.sleep(1) test() print 'the arg is:%s\r' % self.arg t =MyThread(1) t.start() print 'main thread end!'
Python多线程通信问题
新人第一次提问, 最近在学习Python多线程, notify()与wait()语句。这是我写的一个作业, 要求是: 现在的你,是一个农场主。农场中养着10头小牛,牛吃草长大,但只有当下雨的时候草才会长大,每天有20%的概率下雨,草经过3次成长后就可以喂给牛吃了。每头小牛吃过5次草之后就会长大了。要求使用多线程来完成。小牛(消费者)线程和草(生产者)之间需要通信。 以下是我的代码: ``` import threading import random from time import sleep """ 声明全局变量: num_cows: 牛的数量, 整形,十头。 cows: 牛的集合, 列表(数组)。 长度:10 num_grass: 草的数量, 整形,若干。 区间:50-101棵。 为了确保每头牛都可以长大,小草必须至少有50棵。 grass: 草的集合, 列表(数组)。 长度:num_grass initial_stat: 草/牛的初始状态,整形,设置为0。 increment: 用于改变状态的变量,整形,设置为0。 """ # 定义全局变量 num_cows, initial_stat, num_grass = 10, \ 0, \ random.randint(50, 101) cows, grass = [], [] for i in range(num_grass): # 设置草儿数量,初始化每一棵小草状态 grass.append(initial_stat) for i in range(num_cows): # 初始化每一头牛 cows.append(initial_stat) # TODO 草儿生长类 class GrassGrow(threading.Thread): """草成长线程""" # TODO 重写run函数 def run(self): global grass global cows while True: ct.acquire() print("一天过去了...小草会不会生长呢?") grass = rain(grass) # 淋雨的草儿成长一次,数位进一, 呼叫rain函数, 传入参数grass列表 if len(grass) > 0: # 判断还有没有需要生长的草儿 if grassgrow(grass): # 检查草儿,若有一株淋到三次雨,通知牛儿吃草 print("提醒牛儿该吃草了") ct.notify() # 提醒牛儿线程该吃草了 ct.release() print("草线程解锁") sleep(1) print("通知牛儿吃草了") elif len(grass) <= 0: # 如果草儿被吃完了,结束进程 print("草儿被吃光啦") ct.release() # 解锁 break # 退出程序 # TODO 牛儿生长类 class CowGrow(threading.Thread): """牛儿成长线程""" print("start") # TODO 重写run函数 def run(self): print("1") global cows global grass # TODO 随机一头牛吃草 while True: print("2") ct.acquire() print("3") ct.wait() print("4") if grassgrow(grass) and 5 not in cows: print("牛有草能吃了") # 长大的小草中,随机吃掉一株,从草儿列表中移除 index = [] for i in range(len(grass)): if grass[i] >= 3: index.append(i) delete = index[random.randint(0, len(index) - 1)] del grass[delete] cows[random.randint(range(len(cows)))] += 1 # 随机一头牛吃草,状态进1 print("有一头牛把吃了一颗草,现在的牛儿们是:{}".format(cows)) # 判断牛儿中是否有长大的牛儿 elif 5 in cows: # 移除所有已经长大的牛儿 for cow in range(len(cows)): if cows[cow] == 5: del cows[cow] # 判断是不是所有的牛儿都长大了,如果都长大了,结束进程 elif len(cows) == 0: print("所有的牛儿都长大啦") ct.release() break ct.wait() ct.release() # sleep(1) # TODO 下雨函数 def rain(grass_list): """ :param grass_list: 接收 草儿列表作为参数 :return: 返回 新的,淋雨之后的草儿列表 """ # 遍历草列表中的每一株草 rain_probability = random.randint(1, 101) # 每天有20%几率局部下雨。如果未下雨,则所有小草都不会成长。如果下雨了,局部小草会成长。 if rain_probability <= 20: for a_grass in range(len(grass_list)): grass_grow_prob = random.randint(1, 101) if grass_grow_prob <= 50 and 0 <= grass_list[a_grass] <= 2: grass_list[a_grass] += 1 print("今天下雨啦,现在的小草们:{}".format(grass)) print("今天没有下雨,没有小草生长...") return grass_list # TODO 判断草长大函数 def grassgrow(grass_list): """ :param grass_list: 接收 草儿列表作为参数 :return: 返回 若有生长好的小草则返回真,否则为假 """ if 3 not in grass_list: print("目前为止还没有小草生长完成") return False else: print("有小草生长完成了,现在的小草们:{}".format(grass)) return True if __name__ == "__main__": ct = threading.Condition() # 定义线程变量, 用于多线程通信 cow_thread = CowGrow() grass_thread = GrassGrow() cow_thread.start() print("牛等待吃草") grass_thread.start() ``` rain函数用来20%几率下雨, grasgrow函数用来判断有没有草淋了三次雨, 一旦有草淋到三次雨就可以了通知CowGrow线程吃草了。 我的解题思路是: 创建一个列表grass代表草, 一个列表cows代表牛。类GrassGrow中当判断grassgrow函数为真时, 唤醒牛线程。然后随机一头牛吃了一颗草之后,阻塞自己等待。而当我实际运行的时候,牛在一开始被阻塞之后一直没有被唤醒 以下是运行结果: ============================================= start 1 2 3牛等待吃草 一天过去了...小草会不会生长呢? 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1] 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[1, 1, 1, 0, 0, 2, 1, 1, 1, 2, 0, 0, 1, 1, 2, 1, 2, 2, 1, 0, 1, 1, 0, 1, 2, 1, 0, 2, 1, 1, 0, 1, 2, 1, 1, 0, 1, 0, 2, 1, 2, 2, 2, 0, 0, 2, 1, 2, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 2, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 0, 1, 1, 2, 2, 2, 0, 2, 1, 2, 1, 2, 1, 0, 1, 0, 2, 1, 1, 1, 2, 1, 1, 1] 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 1, 1, 2, 2, 2, 3, 2, 1, 1, 1, 0, 1, 2, 2, 1, 2, 2, 2, 0, 1, 3, 1, 2, 0, 1, 0, 3, 2, 3, 3, 3, 0, 1, 2, 1, 2, 0, 1, 1, 2, 2, 1, 0, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 2, 3, 1, 2, 2, 1, 3, 2, 1, 1, 2, 3, 2, 2, 1, 2, 1, 3, 1, 2, 2, 1, 1, 0, 3, 2, 2, 1, 3, 2, 2, 1] 今天没有下雨,没有小草生长... 有小草生长完成了,现在的小草们:[2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 1, 1, 2, 2, 2, 3, 2, 1, 1, 1, 0, 1, 2, 2, 1, 2, 2, 2, 0, 1, 3, 1, 2, 0, 1, 0, 3, 2, 3, 3, 3, 0, 1, 2, 1, 2, 0, 1, 1, 2, 2, 1, 0, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 2, 3, 1, 2, 2, 1, 3, 2, 1, 1, 2, 3, 2, 2, 1, 2, 1, 3, 1, 2, 2, 1, 1, 0, 3, 2, 2, 1, 3, 2, 2, 1] 提醒牛儿该吃草了 草线程解锁 通知牛儿吃草了 一天过去了...小草会不会生长呢? ============================================== 可以看到牛只有一开始调用了一次...之后再也没有被唤醒, 而且前几次小草没有sleep就运行了好多次,之后才开始运行sleep,打印"提醒牛儿该吃草了", "草线程解锁", "通知牛儿吃草了"才开始运行。谷歌和本站都查了一些问题,但和我的情况都不太相似。真心像各位请教...拜托了..
Python3 多线程编程出现编译问题
import _thread from time import sleep from datetime import datetime date_time_format='%y-%M-%d %H:%M:%S' def date_time_str(date_time): return datetime.strftime(date_time,date_time_format) def loop_one(): print('+++线程一开始于:',date_time_str(datetime.now())) print('+++线程一休眠4秒') sleep(4) print('+++线程一休眠结束,结束于:'.date_time_str(datetime.now())) def loop_two(): print('***线程二开始于:',date_time_str(datetime.now())) print('***线程二休眠2秒') sleep(2) print('***线程二休眠结束,结束于:'.date_time_str(datetime.now())) def main(): print('-----所有线程开始时间:',date_time_str(datetime.now())) _thread.start_new_thread(loop_one,()) _thread.start_new_thread(loop_two,()) sleep(6) print('-----所有线程结束时间:',date_time_str(datetime.now())) if __name__=='__main__': #__name__是所有模块的内建属性 main() 编译时出现下列问题,求解答 Unhandled exception in thread started by <function loop_two at 0x000001CA310E0AE8> line 21, in loop_two print('***线程二休眠结束,结束于:'.date_time_str(datetime.now())) AttributeError: 'str' object has no attribute 'date_time_str' line 15, in loop_one print('+++线程一休眠结束,结束于:'.date_time_str(datetime.now())) AttributeError: 'str' object has no attribute 'date_time_str'
python pool线程无限打开
![图片说明](https://img-ask.csdn.net/upload/201706/08/1496927133_714582.png) 打开任务管理一看,足足打开了4页的python,怎么回事?map方法不会自动结束掉完成的进程?
python3中怎么利用多线程快速打印数字?
问题描述:比如利用多线程快速打印出“0-100”????????????????????????????
python 函数中开启线程
python 函数中开启线程,每次进入函数开启一次线程,线程里面根据传递的参数处理
Python如何实现多线程与多进程的配合工作?
#!/usr/bin/env python #coding=utf8 import multiprocessing import threading import threadpool import time import re import os ''' 想法: 开启了11个进程,第一个进程是以多线程方式运行,再通过进程间通信来使其他进程工作. ''' def put_test(str1): # 处理出函数名,开启多线程 print str1, q.put(str1) time.sleep(1) def get_test(): # 进程池除第一个以外的进程 print ' 5' print q.qsize(),os.getpid() print q.get(True,1) time.sleep(1) ############################################################### if __name__=='__main__': multiprocessing.freeze_support() q=multiprocessing.Queue(maxsize = 10) # 线程池 data=range(1,11) pool=threadpool.ThreadPool(10) requests=threadpool.makeRequests(put_test,data) [pool.putRequest(req) for req in requests] pool.wait() # 进程池 pool2 = multiprocessing.Pool(processes=3) for var in range(1,11): # 20个进程 pool2.apply_async(get_test,[]) pool2.close() pool2.join() print "size:",q.qsize() ``` ``` 这段代码出问题了,求助。
有关python socket 多线程问题
我现在写的程序是模拟p2p DHT 就是peer1 知道peer2 和 peer3的port 依此类推 现在我写了一个程序 打开的每个xterm端口是一个peer 窗口里可以显示ping所返回的信息 代码如下 我测试了好久 有的显示返回信息 有的显示接收信息 有的豆显示 有的根本不显示 刚学编程半年 python很多东西不了解 socket 和多线程完全是先学先用的 所以请各位看一下 到底问题出在哪里 以下是代码 import sys import time import socket import threading class peer_server(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.ID = None self.port = None def run(self): print(self.port) server_port = self.port serverSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) serverSocket.bind(('', server_port)) while 1: message, clientAddress = serverSocket.recvfrom(2048) sendMessage = 'A ping response message was received from Peer {:}'.format(self.ID) serverSocket.sendto(sendMessage.encode('ascii') , clientAddress) print('server {:}'.format(self.ID)) print(message.decode('ascii')) print(time.time()) class peer_client(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.ID = None self.port1 = None self.port2 = None def run(self): while 1: server_port = self.port1 clientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sendMessage = 'A ping request message was received from Peer {:}'.format(self.ID) clientSocket.sendto(sendMessage.encode('ascii'),('', server_port)) receiveMessage, serverAddress = clientSocket.recvfrom(2048) print('client {:}'.format(self.ID)) print(receiveMessage.decode('ascii')) print(time.time()) clientSocket.close() server_port = self.port2 clientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) clientSocket.sendto(sendMessage.encode('ascii'),('', server_port)) receiveMessage, serverAddress = clientSocket.recvfrom(2048) print('client {:}'.format(self.ID)) print(receiveMessage.decode('ascii')) print(time.time()) clientSocket.close() time.sleep(5) class peer(threading.Thread): ID = None port = None port1 = None port2 = None def __init__(self, ID, fID, sID): self.ID = ID self.port = 50000 + ID self.port1 = 50000 + fID self.port2 = 50000 + sID def start_server(self): server = peer_server() server.ID = self.ID server.port = self.port server.start() def ping(self): client = peer_client() client.ID = self.ID client.port1 = self.port1 client.port2 = self.port2 client.start() p0 = peer(int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3])) p0.start_server() p0.ping()
python 多线程怎么同时一直运行
``` import threading import time def a(): while 1: for x in range(3): print(x) time.sleep(1) def b(): while 1: for y in range(4,6): print(y) time.sleep(1) def c(): while 1: for z in range(7,10): print(z) time.sleep(1) aa = threading.Thread(target=a()) bb = threading.Thread(target=b()) cc = threading.Thread(target=c()) aa.start() bb.start() cc.start() ``` 我的目的是 这三个线程启动后就一起同时运行。直到我手动关闭。 可是,现在它只是aa在运行,那两个执行。 这是怎么回事? (如果函数里不加while那它们就依次运行一次就停了。 但我的目的是:三个线程启动后就一起同时运行。直到我手动关闭。)
Python 使用多线程写入数据库,报错
#问题描述,定义了一个函数,用于数据库写入表,直接使用函数是可以运行,但我创建了一个 多线程,在多线程里面使用运行函数,然后后错 import mysql.connector from mysql.connector import errorcode import threading,time #数据库连接参数 def sqlconn(): dbconfig={'user': 'qrcodeadmin','password': 'careyes!@#','host': '119.23.8.62','port':3308,'database': 'qrcodes','raise_on_warnings': True} try: cnx = mysql.connector.connect(**dbconfig) print('数据库连接成功') except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("Something is wrong with your user name or password") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("Database does not exist") else: print(err.encode) return cnx def handle(): while(True): global UID,ID for i in range(50): print(i) sqlinsert="INSERT INTO qrcode (URL,QrID) VALUES (%s,%s)",(UID,ID) cur.execute(sqlinsert[0],sqlinsert[1]) cur.execute(sqlinsert[0],sqlinsert[1]) dbcon.commit() if __name__=='__main__': global cur dbcon=sqlconn() cur=dbcon.cursor() UID=' MjAxNzEwMTExMjQyNDQ' ID='201710111242420111' #直接使用handle可以运行 handle() #------------- sql_thread=threading.Thread(target=handle) #如果使用线程就会报错 sql_thread.start() dbcon.close() print(dbcon) #报错内容 Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 280, in _send_cmd self._socket.send( AttributeError: 'NoneType' object has no attribute 'send' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Python\lib\threading.py", line 914, in _bootstrap_inner self.run() File "C:\Python\lib\threading.py", line 862, in run self._target(*self._args, **self._kwargs) File "sqltestV0.2_Thread.py", line 34, in handle cur.execute(sqlinsert[0],sqlinsert[1]) File "C:\Python\lib\site-packages\mysql\connector\cursor.py", line 561, in exe cute self._handle_result(self._connection.cmd_query(stmt)) File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 514, in cmd_query result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 284, in _send_cmd raise errors.OperationalError("MySQL Connection not available.") mysql.connector.errors.OperationalError: MySQL Connection not available.
Python关于Tkinter的多线程问题
使用TKinter编写界面,实现选择测试用例并执行,最后打印出测试结果。功能是实现了,可是每次一点下开始执行,整个界面就失去响应了,要等到测试用例执行完了,界面才恢复响应,已经把执行用例和画界面分别作为单独的线程来处理了,为什么还是不行? 界面如下: ![图片说明](https://img-ask.csdn.net/upload/201512/22/1450763641_583787.png) 相关代码如下: def ExcuteSet(): global Exe_Flag Exe_Flag=True #执行测试用例 exe_thread= threading.Thread(target=ExecuteCase) exe_thread.setDaemon(True) exe_thread.start() exe_thread.join() def Interface(): global ComX,Baud,TBuf global txt1,txt2,txt3 # 界面 root.title(u'自动化测试工具') root.geometry('800x600') #滚动条 scroll1=Tk.Scrollbar(root,orient=Tk.VERTICAL) #滚动条 scroll1.pack(fill="y",side='right') txt1 = Tk.Text(root,width=60,height=20,border=5,yscrollcommand=scroll1.set) txt1.pack(side='right',padx=3,pady=1,anchor='c') txt1.bind("<Key>",TextKey) scroll1.config(command=txt1.yview) txt1.place(x=300,y=300) #scroll1.place(x=750,y=300) #操作按钮 TBuf = StringVar() cnv1 = tk.Canvas(root,height=260,width=260) cnv1.pack(side='bottom',padx=0,pady=0,anchor='c') cnv1.create_window(60,40,window=ttk.Label(root,text=u'串口号: ')) cnv1.create_window(165,40,window=ttk.Combobox(root,textvariable=ComX,values=['COM1', 'COM2', 'COM3','COM4','COM5', 'COM6', 'COM7','COM8'],width=12)) cnv1.create_window(60,80,window=ttk.Label(root,text=u'波特率: ')) cnv1.create_window(165,80,window=ttk.Combobox(root,textvariable=Baud,values=['4800','9600','14400','19200','38400','57600','115200'],width=12)) cnv1.create_window(70,120,window=ttk.Label(root,text=u'输入目录: ')) cnv1.create_window(240,120,window=ttk.Entry(root,textvariable=TBuf,width=40)) cnv1.create_window(80,150,window=ttk.Button(root,textvariable=OpenOff,command=COMOpen,width=12)) cnv1.create_window(80,180,window=ttk.Button(root,text=u'选择用例',command=SelectCase,width=12)) cnv1.create_window(80,210,window=ttk.Button(root,text=u'开始执行',command=ExcuteSet,width=12)) cnv1.create_window(80,240,window=ttk.Button(root,text=u'停止测试',command=StopTest,width=12)) cnv1.create_window(175,180,window=ttk.Button(root,text=u'清除用例',command=ClearCase,width=12)) cnv1.place(x=320,y=0) #滚动条 scroll2=Tk.Scrollbar(root,orient=Tk.VERTICAL) #滚动条 scroll2.pack(fill="y",side='left') #显示测试用例 txt2 = Tk.Text(root,width=40,height=20,border=5,yscrollcommand=scroll2.set) txt2.pack(padx=3,pady=1,anchor='c') scroll2.config(command=txt2.yview) txt2.place(x=0,y=0) scroll2.place(x=300,y=0) #显示测试用例执行情况 txt3 = Tk.Text(root,width=40,height=20,border=5) txt3.pack(padx=3,pady=1,anchor='c') txt3.place(x=0,y=300) root.mainloop() if __name__=='__main__': isOpened.clear() Init() #初始化 Opencom() threads=[] #读串口数据 com_thread = threading.Thread(target=COMTrce) threads.append(com_thread) #画界面 inter_thread = threading.Thread(target=Interface) threads.append(inter_thread) #执行用例 #exe_thread= threading.Thread(target=ExecuteCase) #threads.append(inter_thread) for t in threads: t.setDaemon(True) t.start() for t in threads: t.join() print "Over!!!!!!!!!!!" ``` ```
python线程问题 threads can only be started once
![图片说明](https://img-ask.csdn.net/upload/201802/25/1519569435_294971.png) 代码如下: import tkinter as tk from tkinter import ttk from threading import Thread import time class main(): def method(self): for i in range(3): time.sleep(1) print(i) op = main() runT = Thread(target=op.method) win = tk.Tk() win.title("Python") def click(): runT.start() action = ttk.Button(win, text="Click Me!", command=click) # 7 action.grid(column=0, row=0) win.mainloop() 我想每次点击下按钮就执行一次,但是python线程只能执行一次 按钮第二次点击就报错threads can only be started once 请问如何才能解决呢?
python多线程导致python已停止
问题签名: 问题事件名称: APPCRASH 应用程序名: python.exe 应用程序版本: 0.0.0.0 应用程序时间戳: 58583522 故障模块名称: MSVCR90.dll 故障模块版本: 9.0.30729.6161 故障模块时间戳: 4dace4e7 异常代码: c0000005 异常偏移: 000000000001e25c OS 版本: 6.1.7601.2.1.0.256.1 区域设置 ID: 2052 其他信息 1: b0fc 其他信息 2: b0fc637196bdd5b70224d3626137a6ab 其他信息 3: 3579 其他信息 4: 35797d1db39c6ec6b5c9510af7c4bfff
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问