标签: polling

使用select/poll/kqueue/kevent来查看新文件的目录

在我的应用程序中,我需要查看新文件的目录.流量非常大,每秒至少会有数百个新文件出现.目前我正在使用这种想法的繁忙循环:

while True:
  time.sleep(0.2)
  if len(os.listdir('.')) > 0:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

运行性能分析后,我看到很多时间都在睡眠中,我想知道是否应该改变它来使用轮询.

我正在尝试使用其中一个可用的类select来轮询我的目录,但我不确定它是否真的有效,或者我是否只是做错了.

我为我的目录获得了一个fd:

fd = os.open('.', os.O_DIRECT)
Run Code Online (Sandbox Code Playgroud)

然后我尝试了几种方法来查看目录何时更改.举个例子,我尝试过的一件事是:

poll = select.poll()
poll.register(fd, select.POLLIN)

poll.poll()  # returns (fd, 1) meaning 'ready to read'

os.read(fd, 4096) # prints largely gibberish but i can see that i'm pulling the files/folders contained in the directory at least

poll.poll()  # returns (fd, 1) again

os.read(fd, 4096) # empty string - no more data
Run Code Online (Sandbox Code Playgroud)

为什么poll()表现得有更多的信息需要阅读?我假设只有在目录中发生了某些变化时才会这样做.

我想在这里做什么甚至可能吗?

如果没有,还有其他更好的选择while True: look for changes吗?

python asynchronous freebsd polling

5
推荐指数
2
解决办法
6507
查看次数

我在MVVM ViewModel地狱

到目前为止,我对应用程序从各处的典型点击事件处理程序转换到完成GUI解耦的过程非常满意.现在我遇到了一些我无法弄清楚的东西,它与我想要弹出GUI的窗口有关,它需要显示模型中的信息.

我想我的问题的简短版本是,在MVVM中绝对禁止允许模型引用ViewModel吗?这是我的场景:我有一组LED可以非常快速地循环显示RGB值.我想在我的GUI中有一个窗口,通过使用ViewModel进行数据绑定来显示更新的颜色.我在测试应用程序中使用模型ViewModel使Window + UserControl正常工作,但现在我必须将此Window放入我的实际应用程序中.

我正在运行的特定模式模拟硬件正在做什么.当我命令模型循环遍历颜色时,它会启动一个更改必要的类成员变量值的线程.

我目前对MVVM的实现基本上都是轮询.为了让其他LED在其他地方更新,我运行了一个调用ViewModel函数的线程.这会更新属性,因此GUI会自动更新,因为我正在使用数据绑定.我的LED示例中的问题是模拟颜色序列是在线程中完成的,因此如果我需要对值进行ViewModel轮询,则由于LED变量的过度锁定,它可能会很慢.

因此,我希望有人可以推荐另一种解决此问题的方法.到目前为止,我唯一能想到的就是让Window datacontext成为一个LEDViewModel,然后将LEDViewModel传递给Model.然后当我调用RGB循环函数时,它可以根据需要更改必要的ViewModel属性,我根本不需要使用任何锁定.

这有意义吗?任何建议都会非常感激.

wpf multithreading mvvm polling

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

在poll上添加/删除描述符的优雅方法

我必须在一个处理大约1000个描述符poll(我不能使用epoll它特定于Linux),我必须能够动态添加/删除它们(处理新连接并删除关闭).

这意味着我应该在每次迭代时重新组合描述符数组.

从技术角度来看,这是显而易见的,但有人知道这样做的一种美妙方式吗?

c c++ unix polling

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

我可以每3秒轮询一次数据库吗

我正在构建一个处理数据后异步发送邮件的系统(处理过程可能需要10秒钟)。

我最初的想法是让Windows服务每3秒对数据库进行一次数据处理请求轮询,以处理第一条记录。完成后,轮询并获取要处理的新的第一条记录。

如果没有记录,请等待3秒钟,然后再次轮询以检查记录。

我不确定这是否是个好主意。我认为使用计时器不是编程的好方法。另外,即使在不需要时,数据库的性能和使用也很重要。

在这种情况下,最佳做法是什么?

使用的技术:.net 3.5,SQL Server,服务器处于服务器场中。

.net architecture sql-server polling

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

在TCP服务器的读/写上实现poll()

我需要这个服务器能够监听并与客户建立新的连接,同时写入现有的连接..即.异步非阻塞i/o.我被告知使用poll()但是在花费了大量时间之后只是试图掌握套接字编程,我仍然不确定如何实现poll()函数.

int sockfd; 

int main(int argc, char *argv[])
{
 int newsockfd, portno; 
 socklen_t clilen;  
 char buffer[256];       
 struct sockaddr_in serv_addr, cli_addr;  
 int n;             

 if (argc < 2) {         
     fprintf(stderr,"ERROR, no port provided\n"); 
     exit(1);
 }

 sockfd = socket(AF_INET, SOCK_STREAM, 0);      
 if (sockfd < 0)                    
    error("ERROR opening socket");          

 bzero((char *) &serv_addr, sizeof(serv_addr));     

 portno = atoi(argv[1]);            
 serv_addr.sin_family = AF_INET;        
 serv_addr.sin_addr.s_addr = INADDR_ANY;    
 serv_addr.sin_port = htons(portno);    

 if (bind(sockfd, (struct sockaddr *) &serv_addr, 
          sizeof(serv_addr)) < 0) 
          error("ERROR on binding");        
 listen(sockfd,5);                  

 clilen = sizeof(cli_addr);     

 while(1){          
     newsockfd = …
Run Code Online (Sandbox Code Playgroud)

c sockets client-server polling

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

RxJava +改造,获取List并为每个项目添加额外信息

我正在玩RXJava,在Android中进行改造.我正在努力完成以下任务:

我需要定期轮询一个给我一个Observable的调用>(从这里我可以做到)

一旦我得到这个列表,我想迭代每个交付,并调用另一个方法,将给我ETA(所以只是更多信息)我想将这个新信息附加到交付,并返回完整列表与附加的额外信息每个物品.

一旦得到列表,我知道如何在没有rxjava的情况下做到这一点,但我想练习.

到目前为止这是我的代码:

pollDeliveries = Observable.interval(POLLING_INTERVAL, TimeUnit.SECONDS, Schedulers.from(AsyncTask.THREAD_POOL_EXECUTOR))
            .map(tick -> RestClient.getInstance().getApiService().getDeliveries())
                    .doOnError(err -> Log.e("MPB", "Error retrieving messages" + err))
                    .retry()
                    .subscribe(deliveries -> {
                        MainApp.getEventBus().postSticky(deliveries);
                    });
Run Code Online (Sandbox Code Playgroud)

这给了我一份交货清单.现在我想完成第二部分.

希望我足够清楚.谢谢

android polling observable rx-java retrofit

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

如何在Zapier触发器中JSON.parse一个数组?

我正在尝试JSON.parse数组“数据”。我需要能够将数组作为根传递。

{
  "data": [
    {
      "type": "name",
      "id": "123"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

响应看起来应该只包含对象。Zapier似乎不适用于数组。

{
      "type": "name",
      "id": "123"
}
Run Code Online (Sandbox Code Playgroud)

我不应该能够使用简单的脚本来完成工作吗?


编辑:

本质上,您将要在脚本编写中覆盖post_poll方法(https://zapier.com/developer/documentation/v2/scripting/#polling),以便可以拦截API的响应。之后,您只需要返回一个具有所需值的新对象。无需返回:{“ data”:[{...},{...},]},您只需要返回data的值。就像是:

xyz_post_poll: function(bundle){
  var response = JSON.parse(bundle.response.content);
  return response.data || [];
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays json polling zapier

5
推荐指数
2
解决办法
7503
查看次数

在Jenkins中通知/检查SCM轮询失败

我想在Jenkins中检查或获取有关SCM轮询失败的通知(例如,当存储库URL已更改或分支被删除时).我想到了这些:

a)Jenkins控制台脚本,它将列出这些错误的工作

b)为Jenkins配置/安装插件以某种方式通知我这个事实(电子邮件,任何东西)

c)外部脚本/可执行文件(bash,python,...),它将列出由于SCM轮询失败而在过去X小时内失败的构建

version-control scripting polling jenkins

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

使用任务进行连续轮询

这是我一直使用Threads/BackgroundWorker的东西,但我正在尝试迁移到Task的做事方式.

假设我有一个第三方SDK用于从USB端口读取字节.如果没有读取字节,则读取调用将阻塞并在100 ms后超时,返回null.如果读取字节,它会立即返回,返回读取字节的byte []数组.

所以我基本上需要一遍又一遍地轮询,并通过调用解析函数对接收到的字节采取措施.它是一个WPF应用程序,因此返回的字节应该能够传递给UI线程函数.

这样做的正确方法是什么?这是我到目前为止,它似乎工作,但我想确保它是使用TPL做事的正确方法:

private void _connectUsbButton_Click(object sender, RoutedEventArgs e)
{
   ListenForUsbMessagesAsync();
}

private async void ListenForUsbMessagesAsync()
{
    while (true)
    {
        byte[] readBytes = await ReadBytesAsync();
        Parse(readBytes);
    }
}

private Task<byte[]> ReadBytesAsync()
{
    Task<byte[]> readBytesTask = Task.Run(() =>
    {
        byte[] bytes;

        do
        {
            bytes = ReadBytes();
        } while (bytes == null);

        return bytes;
    });

    return readBytesTask;
}

private byte[] ReadBytes()
{
   byte[] readBytes = _usbSdk.ReadBytes(); //100ms timeout (returns null if no bytes read)
   return readBytes;
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task polling task-parallel-library

5
推荐指数
2
解决办法
4635
查看次数

通过轮询Jenkinsfile中的多个GIT存储库来触发作业

具有两个git存储库Jenkinsfile中,这些是在单个Jenkins作业中使用多个GIT存储库的示例:

node {
    dir('RepoOne') {
        git url: 'https://github.com/somewhere/RepoOne.git'
    }
    dir('RepoTwo') {
        git url: 'https://github.com/somewhere/RepoTwo.git'
    }

    sh('. RepoOne/build.sh')
    sh('. RepoTwo/build.sh')
}
Run Code Online (Sandbox Code Playgroud)

如何配置此作业以跟踪这两个存储库的SCM更改,以便每次至少有一个存储库具有更新时触发该作业?

问题在于,作业不是轮询Jenkinsfile内提到的存储库,而是轮询Jenkinsfile本身的存储库(它存储在特殊的存储库中,而不是与源代码一起存储),这是在作业的GUI配置中提到的。

使用旧的Jenkins(无编码管道)和SVN插件,这非常容易,因为可以在GUI配置中提及所有N个存储库,将其检出到单个工作空间的单独子目录并同时进行轮询。

如何使用GIT + Jenkins Pipeline-As-Code获得相同的结果?我尝试在Jenkinsfile中也使用“ poll:true”选项,但没有帮助。那么此选项有什么作用?

更新1:这是我真正使用的管道脚本,但是它不起作用:

properties([
    pipelineTriggers([
        scm('H/5 * * * *')
    ])
])

node {
  stage ('Checkout') {
    dir('cplib') {
      git(
      poll: true,
          url: 'ssh://git@<server>:<port>/base/cplib.git',
          credentialsId: 'BlueOceanMsl',
          branch: 'master'
      )
    }
    dir('cpmffmeta') {
      git(
      poll: true,
          url: 'ssh://git@<server>:<port>/base/cpmffmeta.git',
          credentialsId: 'BlueOceanMsl',
          branch: 'master'
        )
    }
  }

  stage ('Build') {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

git polling jenkins-pipeline

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