我用3个类编写测试代码,并使用Chain of Responsibility设计模式,下面的代码
我打印print(c._abc is b._abc)
,答案是真的,但我原来认为两者是不同的.
然后,在第2轮,我取消注释self._abc = kwargs
并评论其他3行,答案变为False.
为什么会这样?
import abc
class A:
__metaclass__ = abc.ABCMeta
_abc = {}
def __init__(self,successor=None,**kwargs):
self._successor = successor
@abc.abstractmethod
def handlerRequest(self):
pass
class B(A):
def __init__(self,successor=None,**kwargs):
self._successor = successor
print(kwargs)
# self._abc = kwargs # round 2<---uncomment here
self._abc['a'] = kwargs['a'] # round 2<---comment here
self._abc['b'] = kwargs['b'] # round 2<---comment here
self._abc['Hello'] = 'World' # round 2<---comment here
def handlerRequest(self):
if (self._successor is not None):
self._successor.handlerRequest()
print(self._abc)
class …
Run Code Online (Sandbox Code Playgroud) 这是我的dataFrame
df = pd.DataFrame([['@1','A',40],['@2','A',60],['@3','A',47],['@4','B',33],['@5','B',69],['@6','B',22],['@7','B',90],['@8
','C',31],['@9','C',78],['@10','C',12],['@11','C',89],['@12','C',88],['@13','C',99]],columns=['id','channel','score'])
id channel score
0 @1 A 40
1 @2 A 60
2 @3 A 47
3 @4 B 33
4 @5 B 69
5 @6 B 22
6 @7 B 90
7 @8 C 31
8 @9 C 78
9 @10 C 12
10 @11 C 89
11 @12 C 88
12 @13 C 99
Run Code Online (Sandbox Code Playgroud)
每个频道都有自己的总数,我设置百分比= 80%
我想取int(channel'num*0.8)nlargest,所以它会
A channel take int(3*0.8) = 2
B channel take int(4*0.8) = 3
C channel take int(6*0.8) = …
Run Code Online (Sandbox Code Playgroud) 我创建一个按钮,并在单击按钮时尝试运行多处理,
但是UI被阻止了.我希望进程能够在backgorund中运行.
我该如何解决?
from PySide2 import QtCore,QtGui,QtWidgets
import sys
import multiprocessing
from threading import Timer
class TTT(multiprocessing.Process):
def __init__(self):
super(TTT, self).__init__()
self.daemon = True
def run(self):
while True:
t = Timer(5, self.doSomething)
t.start()
t.join()
def doSomething(self):
try:
print('123')
except Exception as e:
print(e)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
btn = QtWidgets.QPushButton('run process')
btn.clicked.connect(self.create_process)
self.setCentralWidget(btn)
def create_process(self):
QtWidgets.QMessageBox.information(self,'hhh','hhh')
t = TTT()
t.start()
t.join()
if __name__=="__main__":
app=QtWidgets.QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 我的路径中有很多csv文件,我希望使用pandas read_csv来读取,然后使用pandas.concat合并所有返回的dataframe,
但我认为我没有正确使用asyncio,因为消耗的时间并没有缩短。
import asyncio
import time
import pandas as pd
import glob2
import os
async def read_csv(filename):
df = pd.read_csv(filename, header=None)
return df
t = time.time()
path = r'C:\LRM_STGY_REPO\IB_IN'
tasks = [asyncio.ensure_future(read_csv(i)) for i in list(glob2.iglob(os.path.join(path, "*.txt")))]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
df = pd.concat([t.result() for t in tasks],ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))
t = time.time()
def read_csv2(filename):
return pd.read_csv(filename, header=None)
df = pd.concat(map(read_csv2,glob2.iglob(os.path.join(path, "*.txt"))),ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))
Run Code Online (Sandbox Code Playgroud)
read_csv 和 read_csv2 的消耗时间相似。
或者还有其他方法来减少连接时间。
我在列表中有很多字典,如下所示:
mylist = [{'name': 'Delivered-To', 'value': '123'},
{'name': 'Received', 'value': 'abc'},
{'name': 'Payload', 'value': 'xxxxxx'}]
Run Code Online (Sandbox Code Playgroud)
如何快速获取name的值是一个参数.
例如:如果我希望得到名字是'收到',并获得字典:
{'name': 'Received', 'value': 'abc'}
Run Code Online (Sandbox Code Playgroud)