我在python中有两个列表,它们以不同的方式(例如顺序)存储一些类实例。现在,我想出于某种目的(独立于现有列表)创建这两个列表的副本。为了清楚地说明我的问题,我在下面创建了一个演示代码。
import copy
class Node:
def __init__(self):
self.node_id = 0
node = Node()
list1 = [node]
list2 = [node]
u_list1 = copy.deepcopy(list1)
u_list2 = copy.deepcopy(list2)
id1 = id(list1[0])
id2 = id(list2[0])
u_id1 = id(u_list1[0])
u_id2 = id(u_list2[0])
Run Code Online (Sandbox Code Playgroud)
通过使用deepcopy的操作,我创建了两个新的列表u_list1,并u_list2独立于从list1和list2,这正是我需要的。但是,我发现一个问题。在节点实例u_list1和u_list2现在也是独立的。它们在内存中具有不同的地址。是否有可能在同一个实例u_list1,并u_list2仍然共享一个地址,就像在实例list1和list2?
我需要的是id1 = id2, u_id1 = u_id2, while id1 != u_id1。
pool map()在Python中使用时是否可以设置操作的时间限制multiprocessing。当达到时间限制时,所有子进程都会停止并返回它们已有的结果。
import multiprocessing as mp
def task(v):
do something
return result
if __name__ == '__main__':
vs = [...]
p= mp.Pool()
results = p.map(task, vs)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我有一个非常大的列表vs。理想情况下,列表中的所有元素都vs将被发送到 function task(),并且所有结果都将保存在resultslist 中。
然而,由于列表vs非常大,而且我执行此过程的时间有限(比如 5 分钟)。我需要的是在达到 5 分钟时停止该map过程,并将计算结果返回到 list results。
编辑1:
我不会终止需要超过 5 分钟才能完成的任务。假设我的列表中有 1000 个任务vs,5 分钟后只完成了 600 个任务。我需要的是杀死所有子进程,并将这 600 个任务的结果保存到列表中results。
我在 GMAS 中编写了我的 MIP 模型,求解器表明我的模型中有 1535272 行、3287490 列和 8425140 个非零值(我不确定它对 GAMS 来说是否太大)。经过 899677 次迭代(1:26:36 运行时间),GAMS 显示
资源使用,限制 1084.469 1000.000 迭代次数,限制 900026 2000000000
MIP 状态 (108):超出时间限制,没有整数解 Cplex 时间:1002.13 秒(确定 849920.06 滴答) CPLEX 错误 1217:不存在解。超出资源限制,未找到整数解。我的电脑有 i7-8700 CPU @ 3.2GHZ 和 32 RAM(计算停止时还没有用完)。我该如何处理这个问题,或者它对 GAMS 来说太大了?
我想在 python 中使用 pyqtgraph 绘制移动立方体(根据给定的数据集更新它们的位置)。我有一个示例代码如下,但我不知道如何绘制立方体而不是代码中使用的球体。另外,我很困惑为什么这段代码在第二次运行时不起作用?我必须关闭我的 spyder 然后再次打开它或重新启动内核以运行第二次运行的代码。(win10, python3.7 spyder3.3.1)
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import numpy as np
app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.opts['distance'] = 20
w.show()
w.setWindowTitle('pyqtgraph example: GLScatterPlotItem')
g = gl.GLGridItem()
w.addItem(g)
##
## First example is a set of points with pxMode=False
## These demonstrate the ability to have points with real size down to a very small scale
##
pos = np.empty((53, 3))
size = np.empty((53))
color = np.empty((53, 4))
pos[0] …Run Code Online (Sandbox Code Playgroud) 我想通过继承 Cython 中的 python 类来构建一个子类。看来我不能直接这样做,因为我在下面遇到了错误。有什么解决方法吗?
代码(osmium是第三方python包,可以使用安装pip):
import osmium
cdef class CounterHandler(osmium.SimpleHandler):
cdef list nodes, ways, relations
def __init__(self):
osmium.SimpleHandler.__init__(self)
self.nodes = []
self.ways = []
self.relations = []
def node(self, n):
pass
def way(self, w):
pass
def relation(self, r):
pass
Run Code Online (Sandbox Code Playgroud)
错误信息:
add.pyx:22:32: First base of 'CounterHandler' is not an extension type
Traceback (most recent call last):
File "setup.py", line 11, in <module>
ext_modules=cythonize("add.pyx"))
File "C:\ProgramData\Miniconda3\envs\osmium\lib\site-packages\Cython\Build\Dependencies.py", line 1102, in cythonize
cythonize_one(*args)
File "C:\ProgramData\Miniconda3\envs\osmium\lib\site-packages\Cython\Build\Dependencies.py", line 1225, in cythonize_one
raise CompileError(None, …Run Code Online (Sandbox Code Playgroud)