python中的许多操作都需要通过https访问.这包括pip安装,或仅使用http.client.HTTPSConnection,或内部使用这些内容的任何模块或应用程序.
如果python是从官方的python pkg安装程序安装的,从https://python.org下载,那么它使用的是openssl的内部版本,并且不包含根证书.任何使用SSL连接的内容都会导致此错误:
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
Run Code Online (Sandbox Code Playgroud)
如何安装根证书以使上述错误消失?
我创建了一个MemoryStream
,传递给CryptoStream
写作.我希望CryptoStream
加密,然后让MemoryStream
我开放,然后阅读其他内容.但是一旦CryptoStream
被处置,它MemoryStream
也会被处置掉.
可以以某种方式打开CryptoStream
基地MemoryStream
吗?
using (MemoryStream scratch = new MemoryStream())
{
using (AesManaged aes = new AesManaged())
{
// <snip>
// Set some aes parameters, including Key, IV, etc.
// </snip>
ICryptoTransform encryptor = aes.CreateEncryptor();
using (CryptoStream myCryptoStream = new CryptoStream(scratch, encryptor, CryptoStreamMode.Write))
{
myCryptoStream.Write(someByteArray, 0, someByteArray.Length);
}
}
// Here, I'm still within the MemoryStream block, so I expect
// MemoryStream to still be usable. …
Run Code Online (Sandbox Code Playgroud) 这是一个过于简单的例子,但我有一些现实生活中的代码在概念上做同样的事情(试图验证派生类的"set"访问器方法的值),并且Analyzer给了我"不要在构造函数中调用可覆盖的方法".我试图找出是否应该更改我的代码,或忽略警告.我想不出任何理由我应该注意这个警告.
public abstract class SimpleUrl
{
protected string _url;
public abstract string Url { get; set; }
public SimpleUrl()
{ }
public SimpleUrl(string Url)
{
this.Url = Url;
}
}
public class HttpUrl : SimpleUrl
{
public HttpUrl()
{ }
public HttpUrl(string Url)
{
this.Url = Url;
}
public override string Url
{
get
{
return this._url;
}
set
{
if (value.StartsWith("http://"))
this._url = value;
else
throw new ArgumentException();
}
}
}
Run Code Online (Sandbox Code Playgroud) (问题修改):到目前为止,答案都包括一个线程重新进入锁定区域的线程,通过递归之类的东西,你可以跟踪单个线程进入锁定两次的步骤.但是有可能以某种方式,对于单个线程(可能来自ThreadPool,可能是由于定时器事件或异步事件或线程进入休眠状态并在其他一些代码块中单独唤醒/重用)以某种方式产生两个不同的地方彼此独立,因此,当开发人员通过简单地阅读他们自己的代码而没有想到它时,会遇到锁重入问题?
在ThreadPool类备注(单击此处)中,备注似乎表明睡眠线程应在不使用时重复使用,否则会因睡眠而浪费.
但是在Monitor.Enter参考页面上(点击这里),他们说"同一个线程在没有阻止的情况下不止一次调用Enter是合法的". 所以我认为必须有一些我应该小心避免的东西.它是什么?这怎么可能单个线程输入两次相同的锁定区域?
假设您有一些锁定区域,不幸的是很长时间.这可能是现实的,例如,如果您访问已被分页的内存(或其他内容).锁定区域中的线程可能会进入睡眠状态.同一个线程是否有资格运行更多代码,这可能会意外地进入同一个锁定区域?在我的测试中,以下内容不会使同一个线程的多个实例运行到同一个锁定区域.
那怎么产生问题呢?你究竟需要小心避免什么?
class myClass
{
private object myLockObject;
public myClass()
{
this.myLockObject = new object();
int[] myIntArray = new int[100]; // Just create a bunch of things so I may easily launch a bunch of Parallel things
Array.Clear(myIntArray, 0, myIntArray.Length); // Just create a bunch of things so I may easily launch a bunch of Parallel things
Parallel.ForEach<int>(myIntArray, i => MyParallelMethod());
}
private void MyParallelMethod()
{
lock (this.myLockObject)
{ …
Run Code Online (Sandbox Code Playgroud) 对于某些类,理想情况下,我想创建特殊的命名实例,类似于"null".据我所知,这是不可能的,所以相反,我使用静态构造函数创建类的静态实例,类似于:
public class Person
{
public static Person Waldo; // a special well-known instance of Person
public string name;
static Person() // static constructor
{
Waldo = new Person("Waldo");
}
public Person(string name)
{
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Person.Waldo是Person类的一个特殊实例,我创建它是因为在我的程序中,有很多其他类可能想要引用这个特殊的着名实例.
实现这种方式的缺点是我不知道如何使Person.Waldo的所有属性都是不可变的,而"普通"Person实例的所有属性都应该是可变的.每当我不小心有一个Person对象指向Waldo时,我不小心不检查它是否指的是Waldo,那么我不小心破坏了Waldo的属性.
是否有更好的方法,甚至是一些其他替代方法来定义类的特殊知名实例?
我现在知道的唯一解决方案是实现get和set访问器,并检查每个集合上的"if(this == Waldo)throw new ...".虽然这有效,但我认为C#可以比我实现它做得更好.如果只有我能找到一些C#方式来使得Waldo的所有属性只读(除了在静态构造函数中).
方括号的C#引用说:方括号[]用于数组,索引器和属性.它们也可以与指针一起使用.(它也表示,对于数组)如果数组索引超出范围,则抛出异常.
因此,当您在数组之外的其他内容上使用方括号时,您如何知道可能抛出的异常?
对于Dictionary(例如),如果使用诸如Dictionary.TryGetValue之类的访问器方法,则可以轻松查找方法可能抛出的异常,但方括号[]的C#引用仅表示它可能会抛出索引的异常.数组上的范围.
因此,如果要对某些数据类型使用方括号,在哪里可以查找可能为该数据类型抛出哪些异常?
我尝试访问一个不存在的Dictionary成员,只是为了看看会发生什么,我得到了KeyNotFoundException.我知道你也可以得到NullReferenceException.这记录在哪里?什么是完整的清单?
在pycharm中,我想在调试期间中断不执行任何操作的断点。我怎样才能做到这一点?
例如,我想谈一谈以下内容pass
:
for i in range(999999):
if i == 6232:
pass
Run Code Online (Sandbox Code Playgroud)
如果我在上设置了一个断点pass
,则调试器不会在那里中断。到目前为止,我能做的最接近的事情是组成一些未使用的变量名,并为其分配一个无意义的值,因此我可以在该行上设置一个断点:
for i in range(999999):
if i == 6232:
foobar_unused_variable = "At least I can set a breakpoint on this line."
Run Code Online (Sandbox Code Playgroud) Sourcetree Windows用户如何在推送之前在某些文件上设置可执行位?
如果系统管理员在Windows上使用sourcetree来管理脚本(*.sh
,*.py
等等),这是一个常见问题,这些脚本在远程linux系统上被拉时需要执行。
到目前为止,我发现的唯一解决方案是打开“终端”窗口,然后运行命令:
git update-index --chmod=+x <your_file>
Run Code Online (Sandbox Code Playgroud)
看来这必须是足够常见的情况,才能使用更简单的解决方案,例如右键单击文件并“设置可执行文件”或通过中的某些设置.gitattributes
,但是到目前为止,我找不到任何类似的解决方案。
我也知道您可以定义“自定义操作”,但是如果这种常见的事情确实需要您事先投入大量精力进行设置,这真是令人惊讶。
有没有更好的解决方案?
在 Linux 上使用 .NET (dotnet 5.0)MemoryMappedFile.CreateFromFile()
可以工作(但不支持mapName
),但会抛出CreateNew()
和。由于不支持命名映射,这意味着仅支持持久文件支持的内存映射。CreateOrOpen()
OpenExisting()
System.PlatformNotSupportedException: Named maps are not supported.
有没有办法在 Linux 上的 .NET 中获得基于内存的非持久 MMF?也许是一些 Mono 库,或者 NuGet 中的其他东西?或者甚至是一个使用的工作示例pinvoke
?
我想在 Linux 中的 C# .NET 应用程序和其他一些应用程序(可能是 C、C++ 和/或 python)之间共享内存。最好使用共享内存而不是套接字或管道,因为如果消费者不可用,我不希望数据在缓冲区中等待。
ReadOnlyCollection构造函数要求您为其提供IList.但是如果你有一些想要连接并产生新ROC的ROC,那么Concat方法将返回IEnumerable.哪个不是传递给ROC构造函数的有效参数.
那么如何创建一个ROC作为其他ROC的串联?
到目前为止,这是我能想到的最好的:
ReadOnlyCollection<T> ROCConcat<T> ( ReadOnlyCollection<T> a, ReadOnlyCollection<T> b)
{
List<T> tmp = new List<T>();
foreach (T f in a.Concat(b))
tmp.Add(f);
return new ReadOnlyCollection<T>(tmp);
}
Run Code Online (Sandbox Code Playgroud)