我不确定我想要做的是一个有效的做法,但在这里:我需要我的程序高度并行化所以我认为我可以制作2-3个进程,每个进程可以有2-3个线程.
1)这可能吗?2)有什么意义吗?3)这是我的代码,但是当我尝试加入进程时它会挂起.
PQ = multiprocessing.Queue()
Run Code Online (Sandbox Code Playgroud)
[...]
def node(self, files, PQ):
l1, l2 = self.splitList(files)
p1 = multiprocessing.Process(target=self.filePro, args=(l1,PQ,))
p2 = multiprocessing.Process(target=self.filePro, args=(l2,PQ,))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()
p1.join() # HANGS HERE
p2.join()
while 1:
if PQ.empty():
break
else:
print(PQ.get())
PQ.join()
def filePro(self,lst,PQ):
TQ = queue.Queue()
l1, l2 = self.splitList(lst)
t1 = threading.Thread(target=self.fileThr, args=('a',l1,TQ,))
t2 = threading.Thread(target=self.fileThr, args=('b',l2,TQ,))
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()
t1.join()
t2.join()
while 1:
if TQ.empty():
break
else:
PQ.put(TQ.get())
TQ.task_done()
TQ.join()
def …Run Code Online (Sandbox Code Playgroud) 我的问题是以下问题,尽管我可以在可执行文件本身上设置任何我喜欢的图标,但是我无法更改此图标

我已经尝试了所有方法,但是当我选择exe文件或创建快捷方式时,此PyInstaller图标将出现!
这是exe文件的外观

这是棘手的部分,如果我设置选项--onefile,则不会发生。如果我生成独立exe,则此“其他”不需要的图标消失了!
如果您需要,这是规格文件:
# -*- mode: python -*-
a = Analysis(['Backpack.py'],
pathex=['C:\\Users\\Angelo\\Desktop\\PyInstaller-2.1\\Backpack'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
a.datas += [('back_ico_3.ico', 'C:\\Users\\Angelo\\Desktop\\PyInstaller-2.1\\back_ico_3.ico', 'DATA')]
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='Backpack.exe',
debug=False,
strip=None,
upx=True,
console=False , icon='back_ico_3.ico')
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=None,
upx=True,
name='Backpack')
Run Code Online (Sandbox Code Playgroud) 我不知道如何提出这个问题或使用什么标题.我希望我不违反任何规则.无论如何,有人可以向我解释以下行为吗?我有这个代码:
X x = new X();
x.dosmth(null);
static class X{
void dosmth(Object obj) { System.out.println("X:Object"); }
void dosmth(Double obj) { System.out.println("X:Double"); }
void dosmth(int obj) { System.out.println("X:int"); }
void dosmth(double obj) { System.out.println("X:double"); }
void dosmth(char obj) { System.out.println("X:char"); }
void dosmth(byte obj) { System.out.println("X:byte"); }
}
Run Code Online (Sandbox Code Playgroud)
我得到的是这个:
X:Double
Run Code Online (Sandbox Code Playgroud)
为什么它完全忽略了这条线
void dosmth(Object obj) { System.out.println("X:Object"); }
Run Code Online (Sandbox Code Playgroud)
为什么null对应Double而不是Object?
另外,如果我添加这一行:
void dosmth(Integer obj) {System.out.println("X:Integer"); }
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
both method dosmth(java.lang.Integer) and method dosmth(java.lang.Double) match
Run Code Online (Sandbox Code Playgroud) 我想要做的是在进程发生时显示带有进度条的新面板.
我的代码如下:
case "GoButton":
cards.show(this, "pp");
this.test();
cards.show(this, "panel1");
break;
Run Code Online (Sandbox Code Playgroud)
这是一种actionPerformed方法
但是当我运行程序时它只是忽略第一个cards.show,它执行test代码然后执行第二个cards.show
如果您需要,我还会为您提供其余的代码
public CreatePanel(JFrame frame) {
ext = new ArrayList<>();
files = new ArrayList<>();
this.mainWindow = frame;
this.setSize(256, 256);
cards = new CardLayout();
this.setLayout(cards);
panel1 = new JPanel(null);
createPanel1(panel1);
this.add(panel1, "panel1");
panel2 = new JPanel(null);
createPanel2(panel2);
this.add(panel2, "panel2");
panel3 = new JPanel(null);
createPanel3(panel3);
this.add(panel3, "pp");
cards.show(this, "panel1");
}
public class ProgressPanel {
private static JPanel panel;
private static JProgressBar progressBar;
private static …Run Code Online (Sandbox Code Playgroud) 我试图在 java 程序中使用 Advogadro 的数字 (6.022*10^23),我使用 BigDecimal 变量来存储它。但是我想将它与 int 或 double 相乘并仍然保持精度,但它会引发错误!
bad operand types for binary operator '*'
first type: double
second type: BigDecimal
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法可以做到这一点?还有一种方法可以用科学记数法打印结果吗?
提前致谢!
java ×3
python ×2
bigdecimal ×1
double ×1
exe ×1
ico ×1
jpanel ×1
pyinstaller ×1
swing ×1
variables ×1