小编Zeo*_*kav的帖子

Django - 每隔x秒运行一次函数

我正在开发一个Django应用程序.我有一个API端点,如果需要,它必须执行一个必须重复几次的函数(直到某个条件为真).我现在如何处理它是 -

def shut_down(request):
  # Do some stuff
  while True:
    result = some_fn()
    if result:
      break
    time.sleep(2)

  return True
Run Code Online (Sandbox Code Playgroud)

虽然我知道这是一个可怕的方法,我不应该阻止2秒,我无法弄清楚如何解决它.
在等了4秒之后,这有效.但我想要让循环在后台运行的东西,并在some_fn返回True时停止.(另外,some_fn肯定会返回True)

编辑 -
阅读Oz123的回复给了我一个似乎有效的想法.这就是我做的 -

def shut_down(params):
    # Do some stuff
    # Offload the blocking job to a new thread

    t = threading.Thread(target=some_fn, args=(id, ), kwargs={})
    t.setDaemon(True)
    t.start()

    return True

def some_fn(id):
    while True:
        # Do the job, get result in res
        # If the job is done, return. Or sleep the thread for 2 seconds before trying again.

        if …
Run Code Online (Sandbox Code Playgroud)

python django

25
推荐指数
2
解决办法
9974
查看次数

通过pip安装lxml时出错:需要Microsoft Visual C++ 14.0

我在Windows 10机器上,最近从python 2.7移动到3.5.当尝试通过pip安装lxml时,它会停止并抛出此错误消息 -

构建'lxml.etree'扩展
错误:需要Microsoft Visual C++ 14.0.使用"Microsoft Visual C++构建工具"获取它:http://landinghub.visualstudio.com/visual-cpp-build-tools

我安装了VS 2015的工作副本.当我尝试通过该链接安装visual cpp工具时,它表示已在计算机上安装了Microsoft Visual Studio 2015.我还尝试安装64位和32位版本的visual studio c ++ 2015可再发行组件,但他们都说已经安装了另一个版本的产品.
在命令提示符中键入set包括此 -

VS140COMNTOOLS = C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\Tools \

这意味着路径已设置.
这可能是我在SO上找到的唯一资源,但答案建议从3.5回滚到Python 3.4.3.有人解决了这种问题吗?
需要Microsoft Visual C++ 14.0(无法找到vcvarsall.bat)
编辑:我设法使用预编译的二进制文件(感谢Paul)安装它,但我仍然想知道是什么导致了这一点.

python pip visual-c++

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

React - 从api设置初始状态

我有一个休息API后端设置.但是,我是新的反应.我想在组件的getInitialState函数内设置值.但我无法弄清楚如何填充我需要返回的对象,因为我正在使用异步http请求.正如预期的那样,我返回的对象具有未定义的值.我该如何解决这个问题?
我现在正在使用fetch(可以切换到任何其他库,老实说).在异步调用返回某个值而不是在它发生之前,我无法弄清楚如何调用getInitialState.

import React from 'react';
import 'whatwg-fetch';

export default class IndexPage extends React.Component {

  render() {

    // I basically need to call getInitialState after the last promise has been resolved
    fetch('https://localhost:3000/api/aye')
    .then(function(response) {
      return response.json();
    })
    .then(function(json) {
      // Need to return some values from this.
    });

    return (
      <div>
        <h1>{this.state.jsonReturnedValue}</h1>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

javascript reactjs

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

multer:动态目标路径

我正在编写一个节点应用程序,我正在寻找可以在服务器上上传文件的东西。当只有一个静态目录时,我可以上传文件。但是我需要为每个用户创建目录,然后根据登录的用户将文件上传到这些目录。我查找了一些东西,但我尝试的所有内容都以错误结尾:ENOENT:没有这样的文件或目录,打开...错误. 我目前正在尝试做的是 -

let storage = multer.diskStorage({
  destination: function(req, file, cb) {
    let dest = path.join(__dirname, './documents', 'somenameigetfromtheuser');
    let stat = null;
    try {
      stat = fs.statSync(dest);
    }
    catch (err) {
      fs.mkdirSync(dest);
    }
    if (stat && !stat.isDirectory()) {
      throw new Error('Directory cannot be created');
    } 
    cb(null, dest);
  }
});

let upload = multer({
  storage: storage,
  dest: 'documents/'
});

app.post('/testUpload', upload.single('testfile'), (req, res) => {
  res.json({
    test: 'test'
  })
});
Run Code Online (Sandbox Code Playgroud)

已经回答了一个类似的问题,但它对我来说不起作用,因为我想要请求对象中的目录名称。

当我在 multer 初始化中删除 storage 属性时,文件以随机名称存储在文档目录中。我希望文件具有其原始名称,并且希望将其存储在从 req 对象获取目录名称的目录中。
帮兄弟解决一下,谢谢!

node.js multer

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

Linux 和 Windows 中的多线程模型

在过去的几个月里,我一直在学习关于操作系统的课程。但是,我想对我读到的一点进行澄清。根据我的理解,有三种类型的多线程模型可以将用户级线程映射到内核级线程 -

  • 多对一模式
  • 多对多模型
  • 一对一模型

我可以理解为什么多对一模型在并行处理方面效率不高——因为阻塞系统调用意味着停止任何处理。
然而,在我所指的《操作系统概念》一书中(Abraham Silberschatz、Greg Gagne 和 Peter Galvin 着),它说 Linux 和 Windows 系列都使用一对一的模型,尽管创建过程会产生额外的开销每个创建的用户线程都有一个内核线程。
多对多模型不是更好吗?因为您有许多内核线程,足以具有高度的并行性,并且您始终可以选择两级模型将用户级线程绑定到内核级线程。

TLDR:尽管 Windows 和 Linux 系统的开销较大,但为什么一对一多线程模型比多对多模型更受欢迎?

linux windows multithreading operating-system

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