我希望使用Matplotlib/pylab绘图并在上面显示日期和时间x-axis.为此,我正在使用datetime模块.
这是一个完全符合要求的工作代码 -
import datetime
from pylab import *
figure()
t2=[]
t2.append(datetime.datetime(1970,1,1))
t2.append(datetime.datetime(2000,1,1))
xend= datetime.datetime.now()
yy=['0', '1']
plot(t2, yy)
print "lim is", xend
xlim(datetime.datetime(1980,1,1), xend)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用scatter(t2,yy)命令代替时plot (t2,yy),它会出错:
AttributeError:'numpy.string_'对象没有属性'toordinal'
为什么会发生这种情况?如何与情节一起显示分散?
之前已经问过类似的问题as- AttributeError:'time.struct_time'对象没有'toordinal'属性, 但解决方案没有帮助.
目前我有一个MQTT系统,其中一个客户端发布,一个订阅.现在我想要一个许多客户发布的系统.怀疑者必须了解哪个客户端正在发送信息.
虽然一个明显的方法是简单地在发布消息中附加客户端ID,但我想知道是否有一种方法可以获取客户端ID而无需将其明确添加到消息中.
详细说明,假设主题是"/ hello/world",客户端1发布"OK",客户端2发布"ERR".有没有办法确定哪个客户端发送了什么消息?
我正在使用Mosquitto(现在为Paho)的python MQTT客户端连接到HiveMQ代理。该代码非常基础,取自其文档-https: //pypi.python.org/pypi/paho-mqtt
#SUBSCRIBER
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
client.subscribe("GB/node0/", 2)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print "Topic: ", msg.topic+'\nMessage: '+str(msg.payload)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.15.4", 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
client.loop_forever()
Run Code Online (Sandbox Code Playgroud)
如您在client.subscribe()中所注意到的,QoS为2。这是对官方文档代码的唯一修改。
发布客户的代码是-
#PUBLISHER
import …Run Code Online (Sandbox Code Playgroud) Docker 通常不能在 3.10 之前的 Linux 内核上运行。(在某些情况下,它也可以在3.8内核中运行)。
新内核中哪些功能在旧内核中缺失,导致 docker 无法在其中运行?
我在AWS S3中有一个非常大的文件(几GB),我只需要文件中的少量行满足一定的条件.我不想将整个文件加载到内存中,然后搜索并打印这几行 - 这个内存负载太高了.正确的方法是只加载内存中需要的那些行.
根据AWS文档从文件中读取:
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
displayTextInputStream(fullObject.getObjectContent());
private static void displayTextInputStream(InputStream input) throws IOException {
// Read the text input stream one line at a time and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
这里我们使用BufferedReader.我不清楚这里发生了什么.
我们每次读取新行时是否对S3进行网络调用,并且只将当前行保留在缓冲区中?或者是整个文件加载到内存中,然后由BufferedReader逐行读取?或者介于两者之间?
java inputstream bufferedinputstream amazon-s3 bufferedreader
我在 python 中使用 REQ/REP 类型的套接字进行 ZMQ 通信。有多个客户端尝试连接到一台服务器。已在客户端脚本中添加超时以防止无限期等待。
问题是,当服务器没有运行,并且客户端尝试建立连接时,它的消息被添加到队列缓冲区中,理想情况下此时甚至不应该存在。当脚本开始运行并且新客户端连接时,服务器首先接收前一个客户端的数据。这不应该发生。
当服务器启动时,它假定客户端已连接到它,因为它之前曾尝试连接,并且无法干净地退出(因为服务器已关闭)。
在下面的代码中,当客户端第一次尝试时,它得到ERR 03: Server down哪个是正确的,然后是Error disconnecting. 当服务器启动时,我得到ERR 02: Server Busy第一个连接的客户端。这不应该发生。客户端应该能够与服务器无缝连接,因为它已经启动并正在运行。
服务器代码:
import zmq
def server_fn():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://192.168.1.14:5555")
one=1
while one == 1:
message = socket.recv()
#start process if valid new connection
if message == 'hello':
socket.send(message) #ACK
#keep session alive until application ends it.
while one == 1:
message = socket.recv()
print("Received request: ", message)
#exit connection
if message == 'bye': …Run Code Online (Sandbox Code Playgroud) 我在一个C项目中遇到过这行代码,我不明白.
#define FMT_CHK(fmt, args) __attribute__ ((format (printf, fmt, args)))
Run Code Online (Sandbox Code Playgroud)
GNU网站没有明确解释(https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes)
它的目的是什么__attribute__ ((format ())以及应该如何使用?
我有一个字符串abc.def.ghi.j,我想从中删除abc.,以便我有def.ghi.j.
1)删除具有特定模式的前缀的最佳方法是什么?
2)因为在这种情况下,abc巧合的是前缀,这可能会使事情变得更容易。如果我们想要abc.ghi.j作为输出怎么办?
我用这样的split方法试过了
set name abc.def.ghi.j
set splitVar [split $name {{abc.}} ]
Run Code Online (Sandbox Code Playgroud)
问题是它拆分为、和 中的每一个a,而不是作为一个整体分开。bc.
我有 2 个 python 程序正在运行。Script1 定期将条目写入一个表,Script2 从同一个 MySQL 表中读取。两者同时运行。Script2 必须获取表的最后一个(最新添加的)条目。
现在,问题是 Script1 完美地将条目添加到表中,但 Script2 每次都无法读取最新的条目。它仅在我阅读后关闭连接时才读取最新条目,并在我想再次阅读时重新打开它。
这是唯一可以采取的方法吗?有没有办法在不需要每次关闭和打开连接的情况下获取更新的值?访问不断更新的数据库时,程序员遵循的最佳实践是什么?
更详细地:
下面的代码工作正常,但无法显示更新的值。它第一次成功显示了最后一个条目,但接下来的几次 readComm() 被调用,尽管表已被更新,但再次显示相同的条目。
import MySQLdb
import time
db = MySQLdb.connect("localhost", "root", "abc", "abc")
cursor=db.cursor()
def readComm():
sql = "SELECT * FROM my_table ORDER BY id DESC LIMIT 1;"
try:
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
print '~~~~', results
except:
print "Error! Unable to fetch data"
return
for i in range(5):
readComm()
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
如果我修改它,代码会显示更新的值,以便在我每次进入和退出 readComm() 时打开和关闭数据库。
对代码执行静态分析(SA)时收到警告。我在下面做了简化(带有第一个警告)-
typedef struct testStruct_ {
int *ptr;
} testStruct;
testStruct a;
testStruct *a_ptr;
a_ptr = &a;
a_ptr->ptr = NULL; #WARNING: Directly dereferencing pointer a_ptr.
Run Code Online (Sandbox Code Playgroud)
该代码继续对进行一些操作a_ptr。为了完成起见,我发布了一个示例-
rc = fn_a (filename, a_ptr);
rc = fn_b (a_ptr);
rc = fn_c (a_ptr->ptr);
Run Code Online (Sandbox Code Playgroud)
fn_a定义为-
fn_a (const char *filename, testStruct *a_ptr)
{
a_ptr->ptr = fn_a_2(filename);
if (!a_ptr->ptr) {
ERR("Loading (%s) failed", filename);
return (FALSE);
}
return (TRUE);
}
Run Code Online (Sandbox Code Playgroud)
稍后,我又收到另一条警告:
if (a_ptr && a_ptr->ptr) {
freeFn(a_ptr->ptr);
}
#WARNING: Dereference before NULL check - NULL checking …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用自己的memcpy版本将字符数组从一个指针复制到另一个指针.但是,这会产生错误.看来printf存在问题.
其次,官方memcpy函数返回目标指针.这真的需要吗?如果我修改*dest,它应该反映在*d中.那么返回什么需要什么呢?
#include <stdio.h>
void memcpy2(void *dest, const void *src, size_t n)
{
char *dp = dest;
const char *sp = src;
while (n--)
*dp++ = *sp++;
}
int main(void) {
char *c = "Hello";
char *d=NULL;
memcpy2(d,c,3);
printf( "%c", *d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)