这次我面临着"设计"问题.使用Python,我有一个实现数学算法,使用5个参数.为了找到这5个参数的最佳组合,我使用了5层嵌套循环来枚举给定范围内的所有可能组合.完成所需的时间似乎超出了我的预期.所以我认为现在是使用多线程的时候了......
嵌套循环核心中的任务是计算和保存.在当前代码中,每个计算的结果都附加到列表中,列表将在程序结束时写入文件.
因为我没有太多使用任何语言的多线程经验,更不用说Python了,我想问一些关于这个问题的结构应该是什么的提示.也就是说,应该如何动态地为线程分配计算,以及线程应该如何保存结果,然后将所有结果合并到一个文件中.我希望线程的数量可以调整.
任何带代码的插图都会非常有用.
非常感谢你的时间,我很感激.
#更新第二天:感谢所有有用的答案,现在我知道它是多处理而不是多线程.我总是对这两个概念感到困惑,因为我认为如果它是多线程的,那么OS会自动使用多个处理器来运行它.我今晚有时间亲自动手进行多处理.
当我在主题建模开发人员指南中尝试示例代码时,我真的想了解该代码输出的含义.
首先在运行过程中,它给出:
Coded LDA: 10 topics, 4 topic bits, 1111 topic mask
max tokens: 148
total tokens: 1333
<10> LL/token: -9,24097
<20> LL/token: -9,1026
<30> LL/token: -8,95386
<40> LL/token: -8,75353
0 0,5 battle union confederate tennessee american states
1 0,5 hawes sunderland echo war paper commonwealth
2 0,5 test including cricket australian hill career
3 0,5 average equipartition theorem law energy system
4 0,5 kentucky army grant gen confederates buell
5 0,5 years yard national thylacine wilderness parks …Run Code Online (Sandbox Code Playgroud) 作为Prolog的初学者,我发现Prolog中的交换表达非常不直观.
例如,如果我想表达X和Y在一个家庭中,如:
family(X,Y) :-
married(X,Y);
relative(X,Y);
father_son(X,Y).
Run Code Online (Sandbox Code Playgroud)
我还应该在定义中添加以下内容,以使其"可交换":
married(Y,X);
relative(Y,X);
father_son(Y,X).
Run Code Online (Sandbox Code Playgroud)
但是我们使用Prolog,因为我们想要编写优雅的代码......所以,我希望只在原始代码中添加一行(而不是上面的三行):
family(Y,X).
Run Code Online (Sandbox Code Playgroud)
这是POINT.它会导致不确定!为什么序言不那么"合乎逻辑"?是否有一个替代这个整洁的单行表达式,不会导致不确定?
周末愉快!瓦
我刚刚遇到了一些非常奇怪的Python:
>>> out=[[0]*3]*3
>>> out
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> out[0][1]
0
>>> out[0][1]=9
>>> out
[[0, 9, 0], [0, 9, 0], [0, 9, 0]]
Run Code Online (Sandbox Code Playgroud)
好吧,显然,我想要的是:
[[0, 9, 0], [0, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
不奇怪吗?我对Python不是很熟悉,但Python总是以其直观的行为给我留下深刻的印象.但它是如何产生的呢?
......我怎样才能得到我需要的东西?
谢谢!
瓦
我知道有两种方法可以插入而无需重复.第一个是使用一个WHERE NOT EXISTS子句:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
WHERE NOT EXISTS (
SELECT * FROM table_name AS T
WHERE T.col1 = %s
AND T.col2 = %s)
Run Code Online (Sandbox Code Playgroud)
另一个是做LEFT JOIN:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
FROM ( SELECT %s, %s, %s ) A
LEFT JOIN table_name B
ON B.COL1 = %s
AND B.COL2 = %s
WHERE B.id IS NULL
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
是否存在一个比另一个更快的一般规则,还是依赖于表?有不同的方式比两者都好吗?
以下代码将一次仅创建一个窗口,第二个窗口仅在用户关闭第一个窗口时显示。
如何用不同的标题同时显示它们?
nx.draw_networkx(..a..)
nx.draw_networkx(..b..)
Run Code Online (Sandbox Code Playgroud) 对于Python 2.6,是否有适用于Windows 7环境的多处理的友好包装器?
在另一个问题上,人们只用Unix环境帮助我获得类似的知识.但对于我目前的项目来说,改变环境已经太晚了.
我非常浅薄地使用networkx.将图形写入文件(如graphml)很容易,但如何在不打扰文件系统的情况下将其保存为字符串?
它的医生说这是可能的.
python ×4
networkx ×2
database ×1
graphml ×1
mallet ×1
nested-lists ×1
postgresql ×1
prolog ×1
sql ×1
windows-7 ×1