小编jra*_*amm的帖子

打开文件实际上做了什么?

在所有编程语言(我至少使用过)中,必须先打开文件才能读取或写入文件.

但这种开放式操作实际上做了什么?

典型功能的手册页实际上并没有告诉你除了"打开读/写文件"以外的任何内容:

http://www.cplusplus.com/reference/cstdio/fopen/

https://docs.python.org/3/library/functions.html#open

显然,通过使用该函数,您可以告诉它涉及创建某种有助于访问文件的对象.

另外一种方法是,如果我要实现一个open函数,它需要在Linux上做什么?

c linux

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

python:获取目录两级

好的...我不知道模块在哪里x,但我知道我需要获得目录两级的路径.

那么,是否有更优雅的方式:

import os
two_up = os.path.dirname(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

欢迎使用Python 2和3的解决方案!

python directory operating-system path

61
推荐指数
5
解决办法
7万
查看次数

C++获取EOL的大小(以字节为单位)

我正在读一个ASCII文本文件.它由每个字段的大小定义,以字节为单位.例如,每行包含一个字符串的10个字节,浮点值的8个字节,整数的5个字节,依此类推.

我的问题是读取换行符,取决于操作系统的大小可变(通常为2个字节用于Windows,1个字节用于linux,我相信).

如何在C++中获取EOL字符的大小?

例如,在python中,我可以这样做:

len(os.linesep)
Run Code Online (Sandbox Code Playgroud)

c++ newline eol

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

Networkx 作为任务队列?

我有一个有向无环图networkx。每个节点代表一个任务,节点的前驱是任务依赖项(给定任务在其依赖项执行之前无法执行)。

我想在异步任务队列中“执行”图表,类似于提供的celery服务(以便我可以轮询作业的状态、检索结果等)。Celery 不提供创建 DAG 的能力(据我所知),并且在所有依赖项完成后立即转移到 a 的能力task将是至关重要的(DAG 可能有多个路径,即使一个任务很慢/阻塞) ,可能会继续执行其他任务等)。

有没有任何简单的例子说明我如何实现这一目标,或者甚至networkx与集成celery

python task-queue networkx celery directed-acyclic-graphs

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

并行I/O - 为什么它可以工作?

我有一个python函数,它从文本文件中读取一行并将其写入另一个文本文件.它会对文件中的每一行重复此操作.实质上:

Read line 1 -> Write line 1 -> Read line 2 -> Write line 2...
Run Code Online (Sandbox Code Playgroud)

等等.

我可以使用队列来传递数据来并行化这个过程,所以它更像是:

Read line 1 -> Read line 2 -> Read line 3...

              Write line 1 -> Write line 2....
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 为什么这样做(因为我为什么加快速度?).听起来像是一个愚蠢的问题,但我在想 - 当然我的硬盘一次只能做一件事吗?那么为什么没有一个过程被搁置直到另一个过程完成?

当用高级语言写作时,这样的事情对用户是隐藏的.我想知道什么是低级别的?

python io parallel-processing

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

嵌入Python:没有名为site的模块

我在一个C应用程序中嵌入python.我已经下载了标准的python dist并将其放在相对于程序的位置,并使用它来链接和构建C应用程序.

这在我的开发机器上工作正常,应用程序运行此版本的python.

当我捆绑应用程序和python发行版并部署它时,我得到以下错误:

ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)

这可以通过设置PYTHONHOME到这个'本地'python发行版的路径来修复,但是我不想乱用用户可能已经拥有的任何python安装,所以宁愿不设置这个变量.

任何想法如何正确捆绑python解释器和lib而不干扰可能已经在目标机器上的任何可能的python版本?

c python embedding importerror python-2.7

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

Matplotlib:检查网格是否打开?

Matplotlib有一个非常简单的方法来切换图形上的网格线:

from matplotlib.figure import Figure
fig = Figure()
ax = fig.add_subplot(111)
ax.grid(True)
Run Code Online (Sandbox Code Playgroud)

但是它似乎没有确定网格状态的任何方法(打开/正确或关闭/错误)?

一看源代码显示,埋在Axis类中,有私有变量:self._gridOnMinorself._gridOnMajor

可以通过以下方式访问这些文件:

ax.xaxis._gridOnMinor
ax.yaxis._gridOnMinor
Run Code Online (Sandbox Code Playgroud)

依此类推...但是由于这些被指定为私有,因此我对此有些谨慎。

这真的是检查网格是打开还是关闭的唯一方法?

python grid matplotlib

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

C++ 向量的最小值大于另一个值

我有一个vectors double。我希望找到两者:

  • 向量中大于(或等于) value 的最小值x
  • 向量中小于(或等于) value 的最大值x

例如,如果我有一个向量:

std::vector<double> vec = {0, 1.0, 3.0, 4.0, 5.0};
Run Code Online (Sandbox Code Playgroud)

和一个值

x = 2.6;
Run Code Online (Sandbox Code Playgroud)

我希望找到1.03.0

做到这一点最有效的方法是什么?

我有类似的东西:

double x1, x2; // But these need to be initialised!!!
double x = 2.6;
for (i = 0; i < vec.size(); ++i)
{
  if (vec[i] >= x && vec[i] < x2)
       x2 = vec[i];
  if (vec[i] <= x && vec[i] > x1)
       x1 = vec[i]; …
Run Code Online (Sandbox Code Playgroud)

c++ vector max min

6
推荐指数
2
解决办法
5117
查看次数

带有元数据的 Celery 任务 - 在哪里存储结果?

我有一个长时间运行的芹菜任务,它会输出一些文件。任务的结果是存储文件的文件夹位置和运行时间。

例如:

@app.task()
def my_task():
   start = time.time()
   folder = my_heavy_function()
   end = time.time()
   return json.dumps({ 'folder': folder, 'time': end-start })
Run Code Online (Sandbox Code Playgroud)

在异步调用任务之前,我将元数据存储在 mongodb 中 - 启动任务的用户、描述等。

例如

def endpoint(req, resp, user, description):

   doc = MyMongoDbDocument(
             user=user
             description=description
         )
   task = my_task.delay()
   doc.task_id = task.id
   doc.save()
   resp.status = HTTP_OK
   resp.body = doc.to_json()
Run Code Online (Sandbox Code Playgroud)

为了在这种情况下保持结果,我可以想到两种可能的方法:

  1. 使用celery后端来存储结果(例如redis)。为了将结果链接到元数据,请将任务 ID 存储在元数据中。

  2. 让任务使用结果数据更新元数据。

这里的最佳实践是什么?我可以看到这两种情况的优点和缺点:

  1. 这意味着客户端必须进行两次调用才能检索与任务相关的所有信息。1 获取元数据和任务 id,另一个获取某个端点,该端点将获取AsyncResult任务 id 并返回结果数据。这也意味着更少的数据局部性。相关数据位于不同的地方。另一方面,这意味着没有数据和代码位置的重复 - 即我没有访问不同位置的(元数据)数据库。

  2. 1次调用即可获取所有数据。但是,这意味着将 mongodb 文档 ID 传递给任务,打开另一个到数据库的连接并更新它。这里可能存在写入冲突的可能性。另外,即使假设所有数据库访问代码都在某个库中被整齐地抽象出来,我认为它并不像 1 那样 DRY。

python persistence mongodb celery

6
推荐指数
0
解决办法
2279
查看次数

检查前端每个请求的令牌过期情况

我正在使用 JWT 来验证我的 API 服务器。JWT 由外部身份验证服务器(在本例中为 keycloak)发出,并且典型的过期时间约为 5 分钟 (IIRC),然后前端应使用这些令牌向 API 发出请求。

在发出每个请求之前,我一直在尝试检查前端令牌的到期日期。如果令牌已过期,我将使用刷新令牌首先获取新的身份验证令牌,然后发出请求。

基本工作流程是:

== 登录 == 1. 获取身份验证令牌 2. 存储到期 (exp) 日期(以 UTC 秒为单位)

== API 请求 == 1. 检查到期日期 ( isExpired = expiryDate <= Math.floor(Date.now() / 1000)) 2. 如果正常 => 发出请求 3. 否则,刷新身份验证令牌并重做请求。

像这样检查日期是不好的做法吗?确保请求成功的替代方法是什么?

我问这个问题是因为我在某些机器上看到了问题,过期检查总是返回false(它没有过期)......

javascript jwt ecmascript-6

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