小编Zul*_*lan的帖子

是否有用于通知和等待的python库?

我正在使用python-zookeeper进行锁定,而我正试图找出一种方法来让执行等待通知,因为它正在观看文件,因为它zookeeper.exists()立即返回,而不是阻塞.

基本上,我有下面列出的代码,但我不确定实现notify()wait_for_notification()函数的最佳方法.它可以用os.kill()和完成signal.pause(),但是我确信如果我以后在一个程序中有多个锁可能会导致问题 - 是否有一个特定的Python库对这类事情有好处?

def get_lock(zh):
    lockfile = zookeeper.create(zh,lockdir + '/guid-lock-','lock', [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL | zookeeper.SEQUENCE)

    while(True):
        # this won't work for more than one waiting process, fix later
        children = zookeeper.get_children(zh, lockdir)
        if len(children) == 1 and children[0] == basename(lockfile):
            return lockfile

        # yeah, there's a problem here, I'll fix it later
        for child in children:
            if child < basename(lockfile):
                break

        # exists will call notify when the watched file …
Run Code Online (Sandbox Code Playgroud)

python apache-zookeeper

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

如何在 Makefiles / GCC 中启用 OpenMP 支持

我试图通过将 OpenMP 用于两个不同的项目来并行化 for 循环,但 OpenMP 有一个 Makefile: 问题ignoring #pragma omp parallelize for。所以我需要更改 Makefile 以便它可以支持 OpenMP,但我不知道如何。

all: lbm 

lbm: lbm.c main.c 
    gcc -o lbm lbm.c main.c -lm
clean:
    rm -f lbm *.o

all: mcf 

mcf: implicit.c  mcfutil.c  pbeampp.c  pflowup.c   pstart.c   treeup.c mcf.c       output.c   pbla.c     psimplex.c  readmin.c
    gcc -o mcf *.c 
clean:
    rm -f mcf *.o
Run Code Online (Sandbox Code Playgroud)

gcc makefile openmp

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

Google Places API自动完成显示“糟糕!出了点问题”。

我很难使用带有API密钥的Google Places API自动填充功能。在我的生产站点中,我们没有密钥地使用它,可以正常工作,直到流量达到请求限制。经过研究,发现使用API​​密钥可以获得更高的请求限制。但是,在添加密钥(甚至没有限制)之后,表单中的地址字段将被禁用,并显示“糟糕!出了点问题。”。

这是我正在使用https://maps.googleapis.com/maps/api/js?key=[my_api_key]&libraries=places&callback=initAutocomplete的 Google API URL

我以为我的代码一定有问题。然后,我将Google的官方自动完成示例代码与我的API密钥一起使用,无需进一步修改,结果相同。不用钥匙就可以使用它。

结果和键设置屏幕截图

我很困惑 我不认为代码是错误的。有人可以给我提示吗?

autocomplete google-places-api

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

通过 MPI_Send 发送一个 int 数组

我是 MPI 的新手,我想int通过MPI_Send另一个进程发送一个数组。

// Code example

      int main(int argc, char ** argv)
      {
       int * array;
       int tag=1;
       int size;
       int rank;
       MPI_Status status;
       MPI_Init (&argc,&argv);
       MPI_Comm_size (MPI_COMM_WORLD,&size);
       MPI_Comm_rank (MPI_COMM_WORLD,&rank);
       if (rank == 0)
       {
         array = malloc (10 * sizeof(int)); // Array of 10 elements
         if (!array) // error checking
         {
          MPI_Abort (MPI_COMM_WORLD,1);
         }
       MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
       }
       if (rank == 1)
       {
        MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
        // more code here
       }
      MPI_Finalize();
// More code here
Run Code Online (Sandbox Code Playgroud)

我想问三件事。

  1. 这是将数组发送到另一个进程等级的安全方式吗? …

c mpi openmpi

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

更改后,JTree convertValueToText返回被截断

我有一个实现的自定义JTree实现convertValueToText.这种实现取决于某些全球状态.如果返回的字符串比以前返回的字符串更长(实际上我认为更宽,就像在像素中触发它),文本将被截断并用"..."填充.当重绘是由(de)选择元素或repaint树上引起时,这是真的.

convertValueToText以这种方式实施是否有效?(我知道树形显示不会自动更新).

如何摆脱"..."并强制所有元素用他们当前的文本值正确绘制?

UPDATE2:

显然我违反了Swings相当严格的踩踏政策(http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html).进行更新:

        SwingUtilities.invokeAndWait(new Runnable() {
            @Override
            public void run() {
                for (int row = 0; row < tree.getRowCount(); row++) {
                    ((DefaultTreeModel) tree.getModel())
                            .nodeChanged((TreeNode) tree.getPathForRow(row)
                                    .getLastPathComponent());
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.

更新:

这是一个最小的例子:

import java.util.Enumeration;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;

public class WeirdTreeFrame extends JFrame {
    public class WeirdTree extends JTree {
        public WeirdTree(TreeNode root) {
            super(root);
        }

        @Override
        public String convertValueToText(Object value, boolean selected,
                boolean expanded, …
Run Code Online (Sandbox Code Playgroud)

java swing jtree

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

为什么 Python 的 MySQLdb 模块中出现意外的关键字“multi”?

我正在尝试使用 MySQLdb 模块删除数据库中的记录。在https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html 中,我发现multi=True在执行中执行多个查询但它产生错误。有人可以帮助我知道我缺少什么吗?

query = "DELETE FROM Service_Machine WHERE Id=(SELECT Id FROM Machines WHERE Id="+id+");" \
        "DELETE FROM Machine_Usage WHERE Id=(SELECT Id FROM Machines WHERE Id="+id+");" \
        "DELETE FROM Machines WHERE Id="+id+");
print(query)
self.cursor.execute(query, multi=True)
Run Code Online (Sandbox Code Playgroud)

python mysql-connector-python

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

如何杀死这个threading.Timer?

我已经使用一个Timer对象启动了一个线程.现在,我想停止这个线程,但我不能.我用过cancel(),但它不起作用.我不知道为什么.

import threading
import time
import sys as system
def Nop():
    print("do nothing")
    return 0
def function():
    try:
        while True:
            print("hello world ")
            time.sleep(2)
    except KeyboardInterrupt:
            print( "Good job!! exception catched") 
t = threading.Timer(10, function)
t.start()
print(t.getName)
counter = 0
while True:
    try:
        time.sleep(1) 
        Nop()
        counter = counter +1
        print(counter)
        if counter == 20:
            print(t.getName)
            t.cancel()
            counter = 0
            break
        if t.is_alive() == False:
            print("The Timer thread is dead...")
    except KeyboardInterrupt:
        print("End of program")
        t.cancel()
        system.exit(0) …
Run Code Online (Sandbox Code Playgroud)

python multithreading timer

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

MPI_Reduce 和 MPI_MIN 如何工作?

如果我有这个代码:

int main(void) {
    int result=0;
    int num[6] = {1, 2, 4, 3, 7, 1};
    if (my_rank != 0) {
        MPI_Reduce(num, &result, 6, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
    } else {
        MPI_Reduce(num, &result, 6, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD)
        printf("result = %d\n", result);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果打印为 1 ;

但如果num[0]=9;那么结果是9

我读到为了解决这个问题,我必须将变量定义num为数组。我无法理解该函数如何MPI_Reduce与 一起使用MPI_MIN。为什么如果num[0]不等于最小数,那么我必须将变量定义num为数组?

c mpi

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

如何在 MPI 中传递 std::unique_ptr ?

有没有办法通过std::unique_ptr,并std::shared_ptr通过MPI发送/接受她?有什么方法可以在 MPI 中发送一个类的对象,我知道可以传递结构,但是对象呢?

c++ mpi shared-ptr unique-ptr

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

OpenMP argmin减少多个值

我有一个例程,它使用一个循环来计算给定下面的粒子表面的粒子的最小高度.此例程尝试随机位置并计算最小高度,然后返回x, y, z值,其中z是找到的最小高度.

该例程可以并行化omp parallel for.但是我在弄清楚如何获得三元组时遇到了问题(x, y, z),而不仅仅是最小值z(因为最小值z当然对应于给定的x, y坐标).z通过使用如下的缩减操作,我实际上可以得到最小的

double x = 0, y = 0, z = 1.0e300; // initially z is large
#pragma omp parallel for reduction(min:z)
for(int trial = 0; trial < NTRIALS; ++trial) {
    // long routine that, at the end, computes x, y, z 
    // and selects only the x, y, z corresponding to the 
    // smallest z
} …
Run Code Online (Sandbox Code Playgroud)

c openmp

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

跨模块转发引用

在 Python 类型中,循环依赖可以通过前向引用来解决:

class A:
    b: "B"

    def __init__(self, b: "B"):
        self.b = b


class B:
    a: A

    def __init__(self):
        self.a = A(self)
Run Code Online (Sandbox Code Playgroud)

mypy 将成功进行类型检查。

但是,如果我将A和拆分B为单独的文件/模块:

a.py:

class A:
    b: "B"

    def __init__(self, b: "B"):
        self.b = b
Run Code Online (Sandbox Code Playgroud)

b.py:

from .a import A


class B:
    a: A

    def __init__(self):
        self.a = A(self)
Run Code Online (Sandbox Code Playgroud)

并使用 mypy 检查模块或包,它失败:

$ mypy -p tt
tt/a.py:2: error: Name 'B' is not defined
tt/a.py:4: error: Name 'B' is not defined
Run Code Online (Sandbox Code Playgroud)

除了将两者放在同一个文件中之外,还有其他方法可以解决这个问题吗?

(使用Python 3.8.4测试) …

python mypy python-typing

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

设置超过 3 个主机的集群时出现 MPI 错误

我们不能在超过 3 台机器的Open MPI集群中运行程序。

如果我们运行:

mpirun --host master,slave5,slave3 ./cluster
Run Code Online (Sandbox Code Playgroud)

有用。

如果我们运行:

mpirun --host master,slave4,slave3,slave5 ./cluster 
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误:

ssh: Could not resolve hostname slave5: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)

尽管它看起来像一个名称解析错误,但事实并非如此,因为 slave5 在第一个命令上工作。

到目前为止,我们已经看到其他人报告了同样的错误而没有任何解决方案。例子:

有任何想法吗?

c linux openmpi

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

Ascii Art in C++

所以我试图在一个C++程序中放入Ascii Art,并通过手动打印每一行来实现,但结果与ascii艺术完全不同.就像是: 在此输入图像描述 是否发生这种情况是因为提示无法识别字符,或者我没有正确完成.这是我想要做的ASCII艺术:

_____/\\\\\\\\\________/\\\\\\\\\\\__________/\\\\\\\\\__/\\\\\\\\\\\__/\\\\\\\\\\\_        
 ___/\\\\\\\\\\\\\____/\\\/////////\\\_____/\\\////////__\/////\\\///__\/////\\\///__       
  __/\\\/////////\\\__\//\\\______\///____/\\\/_______________\/\\\_________\/\\\_____      
   _\/\\\_______\/\\\___\////\\\__________/\\\_________________\/\\\_________\/\\\_____     
    _\/\\\\\\\\\\\\\\\______\////\\\______\/\\\_________________\/\\\_________\/\\\_____    
     _\/\\\/////////\\\_________\////\\\___\//\\\________________\/\\\_________\/\\\_____   
      _\/\\\_______\/\\\__/\\\______\//\\\___\///\\\______________\/\\\_________\/\\\_____  
       _\/\\\_______\/\\\_\///\\\\\\\\\\\/______\////\\\\\\\\\__/\\\\\\\\\\\__/\\\\\\\\\\\_ 
        _\///________\///____\///////////___________\/////////__\///////////__\///////////__
Run Code Online (Sandbox Code Playgroud)

码:

                cout << "_____/\\\\\\\\\________/\\\\\\\\\\\__________/\\\\\\\\\__/\\\\\\\\\\\__/\\\\\\\\\\\_        \n";
                cout << " ___/\\\\\\\\\\\\\____/\\\/////////\\\_____/\\\////////__\/////\\\///__\/////\\\///__       \n";
                cout << "  __/\\\/////////\\\__\//\\\______\///____/\\\/_______________\/\\\_________\/\\\_____      \n";
                cout << "  _\/\\\_______\/\\\___\////\\\__________/\\\_________________\/\\\_________\/\\\_____     \n";
                cout << "    _\/\\\\\\\\\\\\\\\______\////\\\______\/\\\_________________\/\\\_________\/\\\_____    \n";
                cout << "    _\/\\\/////////\\\_________\////\\\___\//\\\________________\/\\\_________\/\\\_____   \n";
                cout << "      _\/\\\_______\/\\\__/\\\______\//\\\___\///\\\______________\/\\\_________\/\\\_____  \n";
                cout << "       _\///________\///____\///////////___________\/////////__\///////////__\///////////__\n";
Run Code Online (Sandbox Code Playgroud)

c++ ascii-art

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