设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4698|回复: 2
打印 上一主题 下一主题

跪求crossin老师指点,感谢

[复制链接]

2

主题

0

好友

20

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2021-11-4 16:46:17 |只看该作者 |倒序浏览
求大神指点,我的目的是读取一个文本,然后将文本每行中如果包含‘!'或者“#‘的行删掉,然后取剩下的行生成一个文本。
因为有的文本比较大,便历起来比较慢,我试着用多线程来操作,但是每次都会报如图片的错误,请大神指点,谢谢
代码如下:
import time
import requests,threading
starttime = time.time()
print ('start:%f' % starttime)
#读取S参数,生成新的文本
file='DM1_PKG_XGMI_TX.s12p'
data=open(file)
##n=8   #以s12p文件为例,后续需要改成输入条件
f=data.readlines()
data.close()
#如果行第一个字符是!或#则变空,把所有数据行和成一个字符串
result=[]

def shaixuan(i):
    lock.acquire()
    if '!' in f[i]:
        f[i]=''
    elif '#' in f[i]:
        f[i]=''
    else:
        pass
    result+=f[i]
    lock.release()
if __name__ == '__main__':
    # 定义一个线程锁
    # 注意修改同一个变量的线程要使用同一个锁
    lock = threading.Lock()
    # 开启多个线程
    t_list = []
    for i in range(len(f)):
        t = threading.Thread(target=shaixuan, args=(i,))
        lock = threading.Lock()
        t_list.append(t)
        t.start()
    for t in t_list:
        t.join()
with open('data11.txt','w') as t:
    t.write(result)
    t.close
endtime = time.time()
print ('start:%f' % endime-starttime)

报错截图附件


捕获.GIF (22.22 KB, 下载次数: 210)

捕获.GIF

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2021-11-4 21:48:06 |只看该作者
代码里小错误很多,建议:
1. 先把非多线程的功能写出来,再考虑多线程
2. 换个高级一点的IDE。pycharm或者vscode都可以,至少把报错信息能显示清楚

bug1
shaixuan函数里用了全局变量result,但没有声明 global result

bug2
t.write(result) 改成 t.writelines(result)

bug3
t.close() 少括号

bug4
最后一行少括号且拼错变量名,改成 print ('start:%f' % (endtime-starttime))

最后我还要说下,你这个需求,要保证每一行的顺序,所以你函数都是加锁来实现,那这个完全没有任何并行的操作,还是排着队一个个等,反倒多了开线程的消耗
你可以拿你的大文件测一下,可能时间比你写一个非多线程的代码更长
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

20

积分

新手上路

Rank: 1

板凳
发表于 2021-11-5 11:25:26 |只看该作者
crossin先生 发表于 2021-11-4 21:48
代码里小错误很多,建议:
1. 先把非多线程的功能写出来,再考虑多线程
2. 换个高级一点的IDE。pycharm或者 ...

多谢老师指点,单线程的程序我已经写完了,这个只是局部的代码。
但是在大文件的时候需要执行的时间很长,可能三四个小时,所以才想着用多线程看能否提升下效率。

初学者,有不少毛病,多谢老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-26 14:37 , Processed in 0.017218 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部