小编Ang*_*own的帖子

Python多处理结合多线程

我不确定我想要做的是一个有效的做法,但在这里:我需要我的程序高度并行化所以我认为我可以制作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)

python multithreading multiprocessing

7
推荐指数
2
解决办法
4058
查看次数

PyInstaller不能更改快捷方式图标

我的问题是以下问题,尽管我可以在可执行文件本身上设置任何我喜欢的图标,但是我无法更改此图标

在此处输入图片说明

我已经尝试了所有方法,但是当我选择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)

python exe pyinstaller ico

4
推荐指数
3
解决办法
4123
查看次数

Java null对应于Double

我不知道如何提出这个问题或使用什么标题.我希望我不违反任何规则.无论如何,有人可以向我解释以下行为吗?我有这个代码:

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)

java

3
推荐指数
1
解决办法
95
查看次数

JPanel直到代码之后才显示

我想要做的是在进程发生时显示带有进度条的新面板.

我的代码如下:

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 swing jpanel event-dispatch-thread

1
推荐指数
1
解决办法
82
查看次数

Java 中 BigDecimal 和 double 的运算

我试图在 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 variables double bigdecimal

0
推荐指数
1
解决办法
1万
查看次数